From 927240cb2b0e7c66bb0676848df033015e05889d Mon Sep 17 00:00:00 2001 From: Chen Jinsen Date: Tue, 26 Jun 2018 18:58:51 +0800 Subject: [PATCH 0001/1852] ARM: dts: rk3288-th804: update regulators node set vcc_tp stay on in suspend. Change-Id: Ie6228b3941abda197d9b82d29a9ec3595f5b2337 Signed-off-by: Chen Jinsen --- arch/arm/boot/dts/rk3288-th804.dts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/rk3288-th804.dts b/arch/arm/boot/dts/rk3288-th804.dts index d92996b881d4b..b8a173f1c539a 100644 --- a/arch/arm/boot/dts/rk3288-th804.dts +++ b/arch/arm/boot/dts/rk3288-th804.dts @@ -238,7 +238,8 @@ regulator-max-microvolt = <3300000>; regulator-name = "vcc_tp"; regulator-state-mem { - regulator-off-in-suspend; + regulator-on-in-suspend; + regulator-suspend-microvolt = <3300000>; }; }; From fb482b5d1a9095c88a9162249e51ae3d6d08e9a4 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Tue, 26 Jun 2018 18:00:59 +0800 Subject: [PATCH 0002/1852] MALI: bifrost: RK: Remove unused code Change-Id: I992a0a37ee369bdc2d62d25417ea771c554034ec Signed-off-by: Finley Xiao --- .../platform/rk/mali_kbase_config_rk.c | 269 ------------------ 1 file changed, 269 deletions(-) diff --git a/drivers/gpu/arm/bifrost_for_linux/platform/rk/mali_kbase_config_rk.c b/drivers/gpu/arm/bifrost_for_linux/platform/rk/mali_kbase_config_rk.c index 324cf75df6a26..b10b8a9ade355 100755 --- a/drivers/gpu/arm/bifrost_for_linux/platform/rk/mali_kbase_config_rk.c +++ b/drivers/gpu/arm/bifrost_for_linux/platform/rk/mali_kbase_config_rk.c @@ -451,272 +451,3 @@ static void kbase_platform_rk_remove_sysfs_files(struct device *dev) device_remove_file(dev, &dev_attr_utilisation); } -static int rockchip_get_efuse_value(struct device_node *np, char *porp_name, - int *value) -{ - struct nvmem_cell *cell; - unsigned char *buf; - size_t len; - - cell = of_nvmem_cell_get(np, porp_name); - if (IS_ERR(cell)) - return PTR_ERR(cell); - - buf = (unsigned char *)nvmem_cell_read(cell, &len); - - nvmem_cell_put(cell); - - if (IS_ERR(buf)) - return PTR_ERR(buf); - - if (buf[0] == LEAKAGE_INVALID) - return -EINVAL; - - *value = buf[0]; - - kfree(buf); - - return 0; -} - -static int rockchip_get_volt_sel_table(struct device_node *np, char *porp_name, - struct volt_sel_table **table) -{ - struct volt_sel_table *sel_table; - const struct property *prop; - int count, i; - - prop = of_find_property(np, porp_name, NULL); - if (!prop) - return -EINVAL; - - if (!prop->value) - return -ENODATA; - - count = of_property_count_u32_elems(np, porp_name); - if (count < 0) - return -EINVAL; - - if (count % 3) - return -EINVAL; - - sel_table = kzalloc(sizeof(*sel_table) * (count / 3 + 1), GFP_KERNEL); - if (!sel_table) - return -ENOMEM; - - for (i = 0; i < count / 3; i++) { - of_property_read_u32_index(np, porp_name, 3 * i, - &sel_table[i].min); - of_property_read_u32_index(np, porp_name, 3 * i + 1, - &sel_table[i].max); - of_property_read_u32_index(np, porp_name, 3 * i + 2, - &sel_table[i].sel); - } - sel_table[i].min = 0; - sel_table[i].max = 0; - sel_table[i].sel = LEAKAGE_TABLE_END; - - *table = sel_table; - - return 0; -} - -static int rockchip_get_volt_sel(struct device_node *np, char *name, - int value, int *sel) -{ - struct volt_sel_table *table; - int i, j = -1, ret; - - ret = rockchip_get_volt_sel_table(np, name, &table); - if (ret) - return -EINVAL; - - for (i = 0; table[i].sel != LEAKAGE_TABLE_END; i++) { - if (value >= table[i].min) - j = i; - } - if (j != -1) - *sel = table[j].sel; - else - ret = -EINVAL; - - kfree(table); - - return ret; -} - -static int rockchip_parse_pvtm_config(struct device_node *np, - struct pvtm_config *pvtm) -{ - if (!of_find_property(np, "rockchip,pvtm-voltage-sel", NULL)) - return -EINVAL; - if (of_property_read_u32(np, "rockchip,pvtm-freq", &pvtm->freq)) - return -EINVAL; - if (of_property_read_u32(np, "rockchip,pvtm-volt", &pvtm->volt)) - return -EINVAL; - if (of_property_read_u32_array(np, "rockchip,pvtm-ch", pvtm->ch, 2)) - return -EINVAL; - if (of_property_read_u32(np, "rockchip,pvtm-sample-time", - &pvtm->sample_time)) - return -EINVAL; - if (of_property_read_u32(np, "rockchip,pvtm-number", &pvtm->num)) - return -EINVAL; - if (of_property_read_u32(np, "rockchip,pvtm-error", &pvtm->err)) - return -EINVAL; - if (of_property_read_u32(np, "rockchip,pvtm-ref-temp", &pvtm->ref_temp)) - return -EINVAL; - if (of_property_read_u32_array(np, "rockchip,pvtm-temp-prop", - pvtm->temp_prop, 2)) - return -EINVAL; - if (of_property_read_string(np, "rockchip,pvtm-thermal-zone", - &pvtm->tz_name)) - return -EINVAL; - pvtm->tz = thermal_zone_get_zone_by_name(pvtm->tz_name); - if (IS_ERR(pvtm->tz)) - return -EINVAL; - if (!pvtm->tz->ops->get_temp) - return -EINVAL; - - return 0; -} - -static int rockchip_get_pvtm_specific_value(struct device *dev, - struct device_node *np, - struct clk *clk, - struct regulator *reg, - int *target_value) -{ - struct pvtm_config *pvtm; - unsigned long old_freq; - unsigned int old_volt; - int cur_temp, diff_temp; - int cur_value, total_value, avg_value, diff_value; - int min_value, max_value; - int ret = 0, i = 0, retry = 2; - - pvtm = kzalloc(sizeof(*pvtm), GFP_KERNEL); - if (!pvtm) - return -ENOMEM; - - ret = rockchip_parse_pvtm_config(np, pvtm); - if (ret) - goto pvtm_value_out; - - old_freq = clk_get_rate(clk); - old_volt = regulator_get_voltage(reg); - - /* - * Set pvtm_freq to the lowest frequency in dts, - * so change frequency first. - */ - ret = clk_set_rate(clk, pvtm->freq * 1000); - if (ret) { - dev_err(dev, "Failed to set pvtm freq\n"); - goto pvtm_value_out; - } - - ret = regulator_set_voltage(reg, pvtm->volt, pvtm->volt); - if (ret) { - dev_err(dev, "Failed to set pvtm_volt\n"); - goto restore_clk; - } - - /* The first few values may be fluctuant, if error is too big, retry*/ - while (retry--) { - total_value = 0; - min_value = INT_MAX; - max_value = 0; - - for (i = 0; i < pvtm->num; i++) { - cur_value = rockchip_get_pvtm_value(pvtm->ch[0], - pvtm->ch[1], - pvtm->sample_time); - if (!cur_value) - goto resetore_volt; - if (cur_value < min_value) - min_value = cur_value; - if (cur_value > max_value) - max_value = cur_value; - total_value += cur_value; - } - if (max_value - min_value < pvtm->err) - break; - } - avg_value = total_value / pvtm->num; - - /* - * As pvtm is influenced by temperature, compute difference between - * current temperature and reference temperature - */ - pvtm->tz->ops->get_temp(pvtm->tz, &cur_temp); - diff_temp = (cur_temp / 1000 - pvtm->ref_temp); - diff_value = diff_temp * - (diff_temp < 0 ? pvtm->temp_prop[0] : pvtm->temp_prop[1]); - *target_value = avg_value + diff_value; - - dev_info(dev, "temp=%d, pvtm=%d (%d + %d)\n", - cur_temp, *target_value, avg_value, diff_value); - -resetore_volt: - regulator_set_voltage(reg, old_volt, old_volt); -restore_clk: - clk_set_rate(clk, old_freq); -pvtm_value_out: - kfree(pvtm); - - return ret; -} - -void kbase_platform_rk_set_opp_info(struct kbase_device *kbdev) -{ - struct device_node *np; - char name[MAX_PROP_NAME_LEN]; - int pvmt_value, leakage; - int lkg_volt_sel, pvtm_volt_sel, volt_sel = -1; - int err = 0; - - if (!kbdev) - return; - - if (IS_ERR_OR_NULL(kbdev->regulator)) - return; - if (IS_ERR_OR_NULL(kbdev->clock)) - return; - - np = of_parse_phandle(kbdev->dev->of_node, "operating-points-v2", 0); - if (!np) { - dev_warn(kbdev->dev, "OPP-v2 not supported\n"); - return; - } - - err = rockchip_get_efuse_value(np, "gpu_leakage", &leakage); - if (!err) { - dev_info(kbdev->dev, "leakage=%d\n", leakage); - err = rockchip_get_volt_sel(np, "rockchip,leakage-voltage-sel", - leakage, &lkg_volt_sel); - if (!err) { - dev_info(kbdev->dev, "leakage-sel=%d\n", lkg_volt_sel); - volt_sel = lkg_volt_sel; - } - } - - err = rockchip_get_pvtm_specific_value(kbdev->dev, np, kbdev->clock, - kbdev->regulator, - &pvmt_value); - if (!err) { - err = rockchip_get_volt_sel(np, "rockchip,pvtm-voltage-sel", - pvmt_value, &pvtm_volt_sel); - if (!err) { - dev_info(kbdev->dev, "pvtm-sel=%d\n", pvtm_volt_sel); - if (volt_sel < 0 || volt_sel > pvtm_volt_sel) - volt_sel = pvtm_volt_sel; - } - } - - if (volt_sel >= 0) { - snprintf(name, MAX_PROP_NAME_LEN, "L%d", volt_sel); - err = dev_pm_opp_set_prop_name(kbdev->dev, name); - if (err) - dev_err(kbdev->dev, "Failed to set prop name\n"); - } -} From 990018ade6472bb12a03621b9d674692721a83b3 Mon Sep 17 00:00:00 2001 From: Wu Liangqing Date: Fri, 22 Jun 2018 11:59:24 +0800 Subject: [PATCH 0003/1852] arm64: dts: rockchip: px30-evb: support miniboard Change-Id: I3c98857e875ddc40df28896f328b4bc8e0c9539f Signed-off-by: Wu Liangqing --- .../boot/dts/rockchip/px30-evb-ddr3-v10.dts | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts index 507b9eeff63df..2b34f7a39cfb8 100644 --- a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts @@ -94,6 +94,15 @@ default-brightness-level = <200>; }; + charge-animation { + compatible = "rockchip,uboot-charge"; + rockchip,uboot-charge-on = <0>; + rockchip,android-charge-on = <1>; + rockchip,uboot-low-power-voltage = <3500>; + rockchip,screen-on-voltage = <3600>; + status = "okay"; + }; + rk809-sound { compatible = "simple-audio-card"; simple-audio-card,format = "i2s"; @@ -164,14 +173,14 @@ wireless-bluetooth { compatible = "bluetooth-platdata"; - /*clocks = <&rk809 1>;*/ - /*clock-names = "ext_clock";*/ + clocks = <&rk809 1>; + clock-names = "ext_clock"; uart_rts_gpios = <&gpio1 RK_PC3 GPIO_ACTIVE_LOW>; pinctrl-names = "default","rts_gpio"; pinctrl-0 = <&uart1_rts>; pinctrl-1 = <&uart1_rts_gpio>; - BT,reset_gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>; - BT,wake_gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; + BT,reset_gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; + BT,wake_gpio = <&gpio2 RK_PB0 GPIO_ACTIVE_HIGH>; BT,wake_host_irq = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>; status = "okay"; }; @@ -309,11 +318,7 @@ &gmac { phy-supply = <&vcc_phy>; - assigned-clocks = <&cru SCLK_GMAC>; - assigned-clock-parents = <&gmac_clkin>; - clock_in_out = "input"; - pinctrl-names = "default"; - pinctrl-0 = <&rmii_pins &mac_refclk>; + clock_in_out = "output"; snps,reset-gpio = <&gpio2 13 GPIO_ACTIVE_LOW>; snps,reset-active-low; snps,reset-delays-us = <0 50000 50000>; From 6eb718fab40c41724b40efd7700b541ef4ab77b7 Mon Sep 17 00:00:00 2001 From: shengfei Xu Date: Wed, 6 Jun 2018 17:09:50 +0800 Subject: [PATCH 0004/1852] arm64: dts: rockchip: add opp-1296000000 for rk3308 Change-Id: Ie734c94b0c136625cd620114d7fa87e8bbc64c83 Signed-off-by: shengfei Xu --- arch/arm64/boot/dts/rockchip/rk3308.dtsi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3308.dtsi b/arch/arm64/boot/dts/rockchip/rk3308.dtsi index a279f0aafd03a..b8bee600686b1 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3308.dtsi @@ -127,6 +127,12 @@ opp-microvolt = <1200000 1200000 1340000>; clock-latency-ns = <40000>; }; + opp-1296000000 { + opp-hz = /bits/ 64 <1296000000>; + opp-microvolt = <1250000 1250000 1340000>; + clock-latency-ns = <40000>; + status = "disabled"; + }; }; arm-pmu { From c7ff7087533ecef7a8b93aee74120503b8921b5a Mon Sep 17 00:00:00 2001 From: shengfei Xu Date: Thu, 28 Jun 2018 10:07:07 +0800 Subject: [PATCH 0005/1852] arm64: dts: rockchip: enable cpufreq 1.3G for rk3308 EVB V11 Change-Id: I06756eb90a8ffca1fe2223bd7e0f8343dd4a8e19 Signed-off-by: shengfei Xu --- arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi b/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi index 0c8d9f3ab7d63..35e029ace6470 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi @@ -254,6 +254,12 @@ cpu-supply = <&vdd_core>; }; +&cpu0_opp_table { + opp-1296000000 { + status = "okay"; + }; +}; + &dmc { center-supply = <&vdd_log>; status = "okay"; From 125aa643920847a7394194da4230236b5793f24a Mon Sep 17 00:00:00 2001 From: Lin Jianhua Date: Thu, 28 Jun 2018 10:19:16 +0800 Subject: [PATCH 0006/1852] arm: dts: rockchip: rk3308-voice-module: update 4amic mapping Change-Id: I42d5d8a90ba0a45ec9268442fe8179dd8343c4c2 Signed-off-by: Lin Jianhua --- .../boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi b/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi index 20c96fab67c31..1953d3ff68d5b 100644 --- a/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi +++ b/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi @@ -37,8 +37,8 @@ &acodec { status = "okay"; - /* ADC5-8 for 4ch capture, loopback to ADC3-4 */ - rockchip,adc-grps-route = <2 3 1 0>; + /* ADC3-6 for 4ch capture, loopback to ADC7 */ + rockchip,adc-grps-route = <1 2 3 0>; }; &i2c1 { From e82944727af1daeae47a52c456caf6bae41e5f7f Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Wed, 27 Jun 2018 09:12:18 +0800 Subject: [PATCH 0007/1852] soc: rockchip: opp_select: Fix of_device_id NULL when get soc info Change-Id: I8a2d96c1f038bf4f288ded9f7edc944ccbac7950 Signed-off-by: Finley Xiao --- drivers/soc/rockchip/rockchip_opp_select.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/soc/rockchip/rockchip_opp_select.c b/drivers/soc/rockchip/rockchip_opp_select.c index 27999746fe3bc..4e45f817401fe 100644 --- a/drivers/soc/rockchip/rockchip_opp_select.c +++ b/drivers/soc/rockchip/rockchip_opp_select.c @@ -770,7 +770,7 @@ int rockchip_init_opp_table(struct device *dev, } of_node_put(np); - rockchip_get_soc_info(dev, NULL, &bin, &process); + rockchip_get_soc_info(dev, matches, &bin, &process); rockchip_get_scale_volt_sel(dev, lkg_name, reg_name, bin, process, &scale, &volt_sel); rockchip_set_opp_info(dev, process, volt_sel); From 18362fe03e11cd578a16a2e2b92a2b6ae55bf2f5 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Wed, 27 Jun 2018 09:41:19 +0800 Subject: [PATCH 0008/1852] soc: rockchip: opp_select: Fix sleeping inside atomic context This patch fixes the following warning: [ 2.226264] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:620 [ 2.226341] in_atomic(): 0, irqs_disabled(): 0, pid: 1, name: swapper/0 [ 2.226366] 4 locks held by swapper/0/1: [ 2.226385] #0: (&dev->mutex){......}, at: [] __device_attach+0x3c/0x134 [ 2.226515] #1: (cpu_hotplug.lock){......}, at: [] get_online_cpus+0x38/0x9c [ 2.226594] #2: (subsys mutex#7){......}, at: [] subsys_interface_register+0x54/0xfc [ 2.226684] #3: (rcu_read_lock){......}, at: [] rockchip_adjust_power_scale+0x88/0x450 [ 2.226771] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 4.4.132 #600 [ 2.226790] Hardware name: Rockchip PX30 evb ddr3 board (DT) [ 2.226809] Call trace: [ 2.226840] [] dump_backtrace+0x0/0x1ec [ 2.226889] [] show_stack+0x14/0x1c [ 2.226918] [] dump_stack+0x94/0xbc [ 2.226946] [] ___might_sleep+0x108/0x118 [ 2.226972] [] __might_sleep+0x70/0x80 [ 2.227001] [] mutex_lock_nested+0x54/0x38c [ 2.227031] [] __of_clk_get_from_provider+0x44/0xec [ 2.227061] [] __of_clk_get_by_name+0xd4/0x14c [ 2.227112] [] of_clk_get_by_name+0x18/0x28 [ 2.227140] [] rockchip_adjust_power_scale+0x2a4/0x450 [ 2.227171] [] cpufreq_init+0x154/0x394 [ 2.227199] [] cpufreq_online+0x1b0/0x68c [ 2.227225] [] cpufreq_add_dev+0x3c/0x94 [ 2.227253] [] subsys_interface_register+0xd8/0xfc [ 2.227281] [] cpufreq_register_driver+0x10c/0x1a8 [ 2.227332] [] dt_cpufreq_probe+0xcc/0xe8 [ 2.227360] [] platform_drv_probe+0x54/0xa8 [ 2.227385] [] driver_probe_device+0x194/0x278 [ 2.227411] [] __device_attach_driver+0x60/0x9c [ 2.227439] [] bus_for_each_drv+0x9c/0xbc [ 2.227464] [] __device_attach+0xc8/0x134 [ 2.227488] [] device_initial_probe+0x10/0x18 [ 2.227514] [] bus_probe_device+0x2c/0x90 [ 2.227541] [] device_add+0x44c/0x510 [ 2.227570] [] platform_device_add+0xa0/0x1e4 [ 2.227597] [] platform_device_register_full+0xa4/0xe4 [ 2.227627] [] rockchip_cpufreq_driver_init+0xd4/0x31c [ 2.227654] [] do_one_initcall+0x84/0x1a4 [ 2.227682] [] kernel_init_freeable+0x260/0x264 [ 2.227708] [] kernel_init+0x10/0xf8 [ 2.227734] [] ret_from_fork+0x10/0x30 Fixes: 197a2d322ade ("soc: rockchip: opp_select: add missing rcu lock") Change-Id: Ib52b6f7bc77bb207a1c8c6880f7a5e916fa3d2ee Signed-off-by: Finley Xiao --- drivers/soc/rockchip/rockchip_opp_select.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/soc/rockchip/rockchip_opp_select.c b/drivers/soc/rockchip/rockchip_opp_select.c index 4e45f817401fe..231f24839922c 100644 --- a/drivers/soc/rockchip/rockchip_opp_select.c +++ b/drivers/soc/rockchip/rockchip_opp_select.c @@ -590,7 +590,7 @@ static int rockchip_adjust_opp_by_irdrop(struct device *dev, count = dev_pm_opp_get_opp_count(dev); if (count <= 0) { ret = count ? count : -ENODATA; - goto out; + goto unlock; } for (i = 0, rate = 0; i < count; i++, rate++) { @@ -598,7 +598,7 @@ static int rockchip_adjust_opp_by_irdrop(struct device *dev, opp = dev_pm_opp_find_freq_ceil(dev, &rate); if (IS_ERR(opp)) { ret = PTR_ERR(opp); - goto out; + goto unlock; } board_irdrop = rockchip_of_get_irdrop(np, opp->rate); if (IS_ERR_VALUE(board_irdrop)) @@ -621,9 +621,18 @@ static int rockchip_adjust_opp_by_irdrop(struct device *dev, } } +unlock: +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + rcu_read_unlock(); +#endif + if (ret) + goto out; + clk = of_clk_get_by_name(np, NULL); - if (IS_ERR(clk)) + if (IS_ERR(clk)) { + ret = PTR_ERR(clk); goto out; + } if (safe_opp && safe_opp != opp && irdrop_scale) { *irdrop_scale = rockchip_pll_clk_rate_to_scale(clk, safe_opp->rate); @@ -634,9 +643,6 @@ static int rockchip_adjust_opp_by_irdrop(struct device *dev, clk_put(clk); out: -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) - rcu_read_unlock(); -#endif return ret; } From 93d79eea8b16742aa2b86042f0abc2d465465b20 Mon Sep 17 00:00:00 2001 From: Guochun Huang Date: Wed, 27 Jun 2018 17:21:08 +0800 Subject: [PATCH 0009/1852] arm64: dts: rockchip: rk3399-android: modify system and vendor path Change-Id: Icfad366093320369c1fa8d0dd100a71a1739e088 Signed-off-by: Guochun Huang --- arch/arm64/boot/dts/rockchip/rk3399-android.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi index 72ed5bbaa1c08..3e917c077f79f 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi @@ -266,14 +266,14 @@ compatible = "android,fstab"; system { compatible = "android,system"; - dev = "/dev/block/platform/fe330000.sdhci/by-name/system"; + dev = "/dev/block/by-name/system"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,verify"; }; vendor { compatible = "android,vendor"; - dev = "/dev/block/platform/fe330000.sdhci/by-name/vendor"; + dev = "/dev/block/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,verify"; From 39b5e39a9a46dda8ee959e831b4ebbb9e5ca92a9 Mon Sep 17 00:00:00 2001 From: Dingqiang Lin Date: Wed, 27 Jun 2018 11:41:52 +0800 Subject: [PATCH 0010/1852] drivers: rkflash: update spi nand ECC strategy 1.Read ECC status according to each flash's identify Internal ECC; 2.Refresh data before reach ECC Flipping Bits. Change-Id: Ie33850e151410cd788ff0220041d041a3d5b4f07 Signed-off-by: Dingqiang Lin --- drivers/rkflash/sfc_nand.c | 191 +++++++++++++++++++++++++++---------- drivers/rkflash/sfc_nand.h | 3 + 2 files changed, 145 insertions(+), 49 deletions(-) diff --git a/drivers/rkflash/sfc_nand.c b/drivers/rkflash/sfc_nand.c index d8716e23e581f..6bc8727fa956b 100644 --- a/drivers/rkflash/sfc_nand.c +++ b/drivers/rkflash/sfc_nand.c @@ -14,29 +14,31 @@ static struct nand_info spi_nand_tbl[] = { /* TC58CVG0S0HxAIx */ - {0x98C2, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x02, 0xD8, 0x00, 18, 8, 0xB0, 0XFF, 4, 8}, + {0x98C2, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x02, 0xD8, 0x00, 18, 8, 0xB0, 0XFF, 4, 8, NULL}, /* TC58CVG1S0HxAIx */ - {0x98CB, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x02, 0xD8, 0x00, 19, 8, 0xB0, 0XFF, 4, 8}, + {0x98CB, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x02, 0xD8, 0x00, 19, 8, 0xB0, 0XFF, 4, 8, NULL}, /* MX35LF1GE4AB */ - {0xC212, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 1, 0xB0, 0, 4, 8}, + {0xC212, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 4, 0xB0, 0, 4, 8, &sfc_nand_ecc_status_sp1}, /* MX35LF2GE4AB */ - {0xC222, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 19, 1, 0xB0, 0, 4, 8}, + {0xC222, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 19, 4, 0xB0, 0, 4, 8, &sfc_nand_ecc_status_sp1}, /* GD5F1GQ4UAYIG */ - {0xC8F1, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 1, 0xB0, 0, 4, 8}, - /* GD5F2GQ40BY2GR */ - {0xC8D2, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 1, 0xB0, 0, 4, 8}, + {0xC8F1, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 8, 0xB0, 0, 4, 8, NULL}, /* MT29F1G01ZAC */ - {0x2C12, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x00, 18, 1, 0xB0, 0, 4, 8}, - /* GD5F1GQ4U */ - {0xC8B1, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 1, 0xB0, 0, 4, 8}, - /* GD5F2GQ4U */ - {0xC8B2, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 19, 1, 0xB0, 0, 4, 8}, + {0x2C12, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x00, 18, 1, 0xB0, 0, 4, 8, &sfc_nand_ecc_status_sp1}, + /* GD5F2GQ40BY2GR */ + {0xC8D2, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 19, 8, 0xB0, 0, 4, 8, &sfc_nand_ecc_status_sp3}, /* GD5F1GQ4U */ - {0xC8D1, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 1, 0xB0, 0, 4, 8}, + {0xC8D1, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 8, 0xB0, 0, 4, 8, &sfc_nand_ecc_status_sp3}, /* IS37SML01G1 */ - {0xC821, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x00, 18, 1, 0xB0, 0XFF, 8, 12}, + {0xC821, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x00, 18, 1, 0xB0, 0XFF, 8, 12, &sfc_nand_ecc_status_sp1}, /* W25N01GV */ - {0xEFAA, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 1, 0xFF, 0XFF, 4, 20}, + {0xEFAA, 4, 64, 1, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 1, 0xFF, 0XFF, 4, 20, &sfc_nand_ecc_status_sp1}, + /* HYF2GQ4UAACAE */ + {0xC952, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 19, 14, 0xB0, 0, 4, 36, NULL}, + /* HYF2GQ4UDACAE */ + {0xC922, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 19, 4, 0xB0, 0, 4, 20, NULL}, + /* HYF1GQ4UDACAE */ + {0xC921, 4, 64, 2, 1024, 0x13, 0x10, 0x03, 0x02, 0x6B, 0x32, 0xD8, 0x0C, 18, 4, 0xB0, 0, 4, 20, NULL}, }; static u8 id_byte[8]; @@ -139,6 +141,122 @@ static int sfc_nand_wait_busy(u8 *data, int timeout) return -1; } +/* + * ecc default: + * 0, No bit errors were detected + * 1, Bit errors were detected and corrected. + * 2, Multiple bit errors were detected and not corrected. + * 3, Bits errors were detected and corrected, bit error count + * exceed the bit flip detection threshold + */ +static u32 sfc_nand_ecc_status(void) +{ + int ret; + u32 i; + u8 ecc; + u8 status; + u32 timeout = 1000 * 1000; + + for (i = 0; i < timeout; i++) { + ret = sfc_nand_read_feature(0xC0, &status); + if (ret != SFC_OK) + return SFC_NAND_ECC_ERROR; + if (!(status & (1 << 0))) + break; + sfc_delay(1); + } + + ecc = (status >> 4) & 0x03; + + if (ecc <= 1) + ret = SFC_NAND_ECC_OK; + else if (ecc == 2) + ret = SFC_NAND_ECC_ERROR; + else + ret = SFC_NAND_ECC_REFRESH; + + return ret; +} + +/* + * ecc spectial type1: + * 0x00, No bit errors were detected; + * 0x01, Bits errors were detected and corrected, bit error count + * may reach the bit flip detection threshold; + * 0x10, Multiple bit errors were detected and not corrected; + * 0x11, Reserved. + */ +u32 sfc_nand_ecc_status_sp1(void) +{ + int ret; + u32 i; + u8 ecc; + u8 status; + u32 timeout = 1000 * 1000; + + for (i = 0; i < timeout; i++) { + ret = sfc_nand_read_feature(0xC0, &status); + if (ret != SFC_OK) + return SFC_NAND_ECC_ERROR; + if (!(status & (1 << 0))) + break; + sfc_delay(1); + } + + ecc = (status >> 4) & 0x03; + + if (ecc == 0) + ret = SFC_NAND_ECC_OK; + else if (ecc == 1) + ret = SFC_NAND_ECC_REFRESH; + else + ret = SFC_NAND_ECC_ERROR; + + return ret; +} + +/* + * ecc spectial type3: + * [0x0000, 0x0011], No bit errors were detected; + * [0x0100, 0x0111], Bit errors were detected and corrected. Not + * reach Flipping Bits; + * [0x1000, 0x1011], Multiple bit errors were detected and + * not corrected. + * [0x1100, 0x1111], Bit error count equals the bit flip + * detectionthreshold + */ +u32 sfc_nand_ecc_status_sp3(void) +{ + int ret; + u32 i; + u8 ecc; + u8 status, status1; + u32 timeout = 1000 * 1000; + + for (i = 0; i < timeout; i++) { + ret = sfc_nand_read_feature(0xC0, &status); + if (ret != SFC_OK) + return SFC_NAND_ECC_ERROR; + ret = sfc_nand_read_feature(0xF0, &status1); + if (ret != SFC_OK) + return SFC_NAND_ECC_ERROR; + if (!(status & (1 << 0))) + break; + sfc_delay(1); + } + + ecc = (status >> 4) & 0x03; + ecc = (ecc << 2) | ((status1 >> 4) & 0x03); + if (ecc < 7) + ret = SFC_NAND_ECC_OK; + else if (ecc == 7 || ecc >= 12) + ret = SFC_NAND_ECC_REFRESH; + else + ret = SFC_NAND_ECC_ERROR; + + return ret; +} + static u32 sfc_nand_erase_block(u8 cs, u32 addr) { int ret; @@ -208,8 +326,7 @@ static u32 sfc_nand_read_page(u8 cs, u32 addr, u32 *p_data, u32 *p_spare) int ret; union SFCCMD_DATA sfcmd; union SFCCTRL_DATA sfctrl; - u8 status; - u8 ecc; + u32 ecc_result; u32 data_sz = 2048; u32 spare_offs_1 = p_nand_info->spare_offs_1; u32 spare_offs_2 = p_nand_info->spare_offs_2; @@ -220,8 +337,11 @@ static u32 sfc_nand_read_page(u8 cs, u32 addr, u32 *p_data, u32 *p_spare) sfcmd.b.addrbits = SFC_ADDR_24BITS; sfc_request(sfcmd.d32, 0, addr, p_data); - sfc_nand_wait_busy(&status, 1000 * 1000); - ecc = (status >> 4) & 0x03; + if (p_nand_info->ecc_status) + ecc_result = p_nand_info->ecc_status(); + else + ecc_result = sfc_nand_ecc_status(); + if (sfc_nand_dev.read_lines == DATA_LINES_X4 && p_nand_info->QE_address == 0xFF && sfc_get_version() != SFC_VER_3) @@ -243,41 +363,14 @@ static u32 sfc_nand_read_page(u8 cs, u32 addr, u32 *p_data, u32 *p_spare) if (ret != SFC_OK) return SFC_NAND_ECC_ERROR; - /* - * ecc status: - * 0, No bit errors were detected - * 1, Bit errors were detected and corrected. If max_ecc_bits equals 1, - * Bit error count exceed the bit flip detection threshold. - * 2, Multiple bit errors were detected and not corrected. - * 3, If max_ecc_bits equals 1, reserved, else bit errors were detected - * and corrected, bit error count exceed the bit flip detection - * threshold - */ - - if (ecc == 0) { - ret = SFC_NAND_ECC_OK; - } else if (ecc == 1) { - if (p_nand_info->max_ecc_bits == 1) - ret = SFC_NAND_ECC_REFRESH; - else - ret = SFC_NAND_ECC_OK; - } else if (ecc == 2) { - ret = SFC_NAND_ECC_ERROR; - } else { - if (p_nand_info->max_ecc_bits == 1) - ret = SFC_NAND_ECC_ERROR; - else - ret = SFC_NAND_ECC_REFRESH; - } - - if (ret != SFC_NAND_ECC_OK) { - PRINT_SFC_E("%s[0x%x], ret=0x%x\n", __func__, addr, ret); + if (ecc_result != SFC_NAND_ECC_OK) { + PRINT_SFC_E("%s[0x%x], ret=0x%x\n", __func__, addr, ecc_result); if (p_data) PRINT_SFC_HEX("data:", p_data, 4, 8); if (p_spare) PRINT_SFC_HEX("spare:", p_spare, 4, 2); } - return ret; + return ecc_result; } static int sfc_nand_read_id_raw(u8 *data) diff --git a/drivers/rkflash/sfc_nand.h b/drivers/rkflash/sfc_nand.h index 4942760caee86..8e01801f32a10 100644 --- a/drivers/rkflash/sfc_nand.h +++ b/drivers/rkflash/sfc_nand.h @@ -112,10 +112,13 @@ struct nand_info { u8 spare_offs_1; u8 spare_offs_2; + u32 (*ecc_status)(void); }; u32 sfc_nand_init(void); void sfc_nand_deinit(void); int sfc_nand_read_id(u8 *buf); +u32 sfc_nand_ecc_status_sp1(void); +u32 sfc_nand_ecc_status_sp3(void); #endif From d1df55f316ef86fa6af5911c0b1d866e32e68039 Mon Sep 17 00:00:00 2001 From: Lin Jianhua Date: Thu, 28 Jun 2018 14:14:44 +0800 Subject: [PATCH 0011/1852] arm: dts: rockchip: rk3308-voice-module: update key config Change-Id: Id521af6a91f3c9f00a7cb30bd9d38b38d12c8309 Signed-off-by: Lin Jianhua --- .../dts/rk3308-voice-module-v10-aarch32.dtsi | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi index 38ed89ede13f3..63bd7be4460ed 100644 --- a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi +++ b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi @@ -21,9 +21,33 @@ poll-interval = <100>; keyup-threshold-microvolt = <1800000>; - recovery-key { - linux,code = ; - label = "recovery"; + esc-key { + linux,code = ; + label = "micmute"; + press-threshold-microvolt = <1130000>; + }; + + home-key { + linux,code = ; + label = "mode"; + press-threshold-microvolt = <901000>; + }; + + menu-key { + linux,code = ; + label = "play"; + press-threshold-microvolt = <624000>; + }; + + vol-down-key { + linux,code = ; + label = "volume down"; + press-threshold-microvolt = <300000>; + }; + + vol-up-key { + linux,code = ; + label = "volume up"; press-threshold-microvolt = <18000>; }; }; From 82c931ea045ec6ea74854aa175334dbfa8f00f1b Mon Sep 17 00:00:00 2001 From: qiujian Date: Fri, 29 Jun 2018 09:27:26 +0800 Subject: [PATCH 0012/1852] arm64: dts: rockchip: px30-android: update veritymode androidboot.veritymode=enforcing Change-Id: If4c99e8283324068c2574eb0831e12f4abf5b970 Signed-off-by: Jian Qiu --- arch/arm64/boot/dts/rockchip/px30-android.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/px30-android.dtsi b/arch/arm64/boot/dts/rockchip/px30-android.dtsi index f2884e8e991d5..80a9e73f337e2 100644 --- a/arch/arm64/boot/dts/rockchip/px30-android.dtsi +++ b/arch/arm64/boot/dts/rockchip/px30-android.dtsi @@ -6,7 +6,7 @@ / { chosen { - bootargs = "earlyprintk=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.veritymode=/dev/block/by-name/metadata androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init kpti=0"; + bootargs = "earlyprintk=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.veritymode=enforcing androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init kpti=0"; }; fiq-debugger { From 6409980c47f80dc611b3fefed208407f15070a65 Mon Sep 17 00:00:00 2001 From: Lin Jianhua Date: Thu, 28 Jun 2018 18:00:51 +0800 Subject: [PATCH 0013/1852] arm: dts: rockchip: rk3308-voice-module: enable sfc Change-Id: I4ca02957fb0ba6a869fe557e6a3a9968f4ef345e Signed-off-by: Lin Jianhua --- arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi index 63bd7be4460ed..cfb74991e6e13 100644 --- a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi +++ b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi @@ -285,6 +285,11 @@ pinctrl-0 = <&pwm0_pin_pull_down>; }; +&sfc { + u-boot,dm-pre-reloc; + status = "okay"; +}; + &tsadc { rockchip,hw-tshut-mode = <0>; /* tshut mode 0:CRU 1:GPIO */ rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */ From a8642fb6754927db8e98ee8503db32b07390784a Mon Sep 17 00:00:00 2001 From: Lin Jianhua Date: Thu, 28 Jun 2018 18:10:03 +0800 Subject: [PATCH 0014/1852] arm: configs: enable slc nand and sfc devices for rk3308 aarch32 Change-Id: Iac9a56cf770519d60ab7de350b7e3cc1de6a6915 Signed-off-by: Lin Jianhua --- arch/arm/configs/rk3308_linux_aarch32_debug_defconfig | 5 ++++- arch/arm/configs/rk3308_linux_aarch32_defconfig | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig index 648ace1e8a38e..c72571d51e4e2 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig @@ -209,7 +209,10 @@ CONFIG_PHY_ROCKCHIP_INNO_USB2=y CONFIG_ANDROID=y CONFIG_NVMEM=y CONFIG_ROCKCHIP_OTP=y -CONFIG_RK_NAND=y +CONFIG_RK_FLASH=y +CONFIG_RK_NANDC_NAND=y +CONFIG_RK_SFC_NAND=y +CONFIG_RK_SFC_NOR=y CONFIG_ROCKCHIP_SIP=y CONFIG_EXT2_FS=y CONFIG_EXT4_FS=m diff --git a/arch/arm/configs/rk3308_linux_aarch32_defconfig b/arch/arm/configs/rk3308_linux_aarch32_defconfig index 3631d4ac3cfba..8bd80726f41b5 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_defconfig @@ -209,7 +209,10 @@ CONFIG_PHY_ROCKCHIP_INNO_USB2=m CONFIG_ANDROID=y CONFIG_NVMEM=y CONFIG_ROCKCHIP_OTP=y -CONFIG_RK_NAND=y +CONFIG_RK_FLASH=y +CONFIG_RK_NANDC_NAND=y +CONFIG_RK_SFC_NAND=y +CONFIG_RK_SFC_NOR=y CONFIG_ROCKCHIP_SIP=y CONFIG_EXT2_FS=y CONFIG_EXT4_FS=m From 5a53910057d2b19307e89834b6da7b377198341a Mon Sep 17 00:00:00 2001 From: Shunqian Zheng Date: Wed, 27 Jun 2018 09:40:05 +0800 Subject: [PATCH 0015/1852] ARM64: dts: rockchip: add firefly ov13850 camera Add firefly linux ov13850 camera node, and enable isp and isp_mmu. Change-Id: I317f4b9895c73913456c957273cc6b18173a8cd9 Signed-off-by: Shunqian Zheng --- .../dts/rockchip/rk3399-firefly-linux.dts | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts index 243eef889e5f0..c3e076f7ff897 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts @@ -670,6 +670,43 @@ io-channels = <&saradc 4>; hp-det-adc-value = <500>; }; + + camera0: ov13850@10 { + status = "okay"; + compatible = "omnivision,ov13850-v4l2-i2c-subdev"; + reg = < 0x10 >; + device_type = "v4l2-i2c-subdev"; + + clocks = <&cru SCLK_CIF_OUT>; + clock-names = "clk_cif_out"; + + pinctrl-names = "rockchip,camera_default", "rockchip,camera_sleep"; + pinctrl-0 = <&cam0_default_pins>; + pinctrl-1 = <&cam0_sleep_pins>; + + rockchip,pd-gpio = <&gpio2 12 GPIO_ACTIVE_LOW>; + rockchip,pwr-gpio = <&gpio1 23 GPIO_ACTIVE_HIGH>; + rockchip,pwr-2nd-gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>; + rockchip,rst-gpio = <&gpio0 8 GPIO_ACTIVE_LOW>; + + rockchip,camera-module-mclk-name = "clk_cif_out"; + rockchip,camera-module-facing = "back"; + rockchip,camera-module-name = "cmk-cb0695-fv1"; + rockchip,camera-module-len-name = "lg9569a2"; + rockchip,camera-module-fov-h = "66.0"; + rockchip,camera-module-fov-v = "50.1"; + rockchip,camera-module-orientation = <0>; + rockchip,camera-module-iq-flip = <0>; + rockchip,camera-module-iq-mirror = <0>; + rockchip,camera-module-flip = <1>; + rockchip,camera-module-mirror = <0>; + + rockchip,camera-module-defrect0 = <2112 1568 0 0 2112 1568>; + rockchip,camera-module-defrect1 = <4224 3136 0 0 4224 3136>; + rockchip,camera-module-defrect3 = <3264 2448 0 0 3264 2448>; + rockchip,camera-module-flash-support = <0>; + rockchip,camera-module-mipi-dphy-index = <0>; + }; }; &i2c3 { @@ -1016,6 +1053,15 @@ status = "okay"; }; +&cif_isp0 { + rockchip,camera-modules-attached = <&camera0>; + status = "okay"; +}; + +&isp0_mmu { + status = "okay"; +}; + &vopb { status = "okay"; }; From e82600a081a328042bc735c33c540ea27b9d02e3 Mon Sep 17 00:00:00 2001 From: Shunqian Zheng Date: Tue, 29 May 2018 15:43:34 +0800 Subject: [PATCH 0016/1852] ARM: dts: px3se-evb: disable uart1 Because px3se evb board enables fiq-debugger on uart1, this disables uart1 and set uart1 iomux in fiq-debugger. Change-Id: I0432216ee2162699309605c72600ad56a1e6c7b9 Signed-off-by: Shunqian Zheng --- arch/arm/boot/dts/px3se-evb.dts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/px3se-evb.dts b/arch/arm/boot/dts/px3se-evb.dts index 1204818423016..fe609cdfed011 100644 --- a/arch/arm/boot/dts/px3se-evb.dts +++ b/arch/arm/boot/dts/px3se-evb.dts @@ -84,6 +84,10 @@ fiq-debugger { compatible = "rockchip,fiq-debugger"; + + pinctrl-names = "default"; + pinctrl-0 = <&uart1_xfer>; + rockchip,serial-id = <1>; rockchip,wake-irq = <0>; /* If enable uart uses irq instead of fiq */ @@ -514,7 +518,8 @@ }; &uart1 { - status = "okay"; + /* disable uart1 explicitly since fiq-debugger is on uart1 */ + status = "disabled"; }; &usb_host_ehci { From 47d0457bf6b29659d4eda69c0bb6d69287c8f844 Mon Sep 17 00:00:00 2001 From: Shunqian Zheng Date: Tue, 29 May 2018 15:41:52 +0800 Subject: [PATCH 0017/1852] media: i2c: Add adv7181 driver This adds a adv7181 driver that can receive cvbs in and output NTSC yuv data. Change-Id: I1f86178b38fd079f790f1194304e5b94f72e523f Signed-off-by: Shunqian Zheng --- drivers/media/i2c/Kconfig | 9 + drivers/media/i2c/Makefile | 1 + drivers/media/i2c/adv7181.c | 550 ++++++++++++++++++++++++++++++++++++ 3 files changed, 560 insertions(+) create mode 100644 drivers/media/i2c/adv7181.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index ac9ee71d51a5c..6f9568cd1705d 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -184,6 +184,15 @@ config VIDEO_ADV7180 To compile this driver as a module, choose M here: the module will be called adv7180. +config VIDEO_ADV7181D + tristate "Analog Devices ADV7181 decoder" + depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + ---help--- + Support for the Analog Devices ADV7181 video decoder. + + To compile this driver as a module, choose M here: the + module will be called adv7181. + config VIDEO_ADV7183 tristate "Analog Devices ADV7183 decoder" depends on VIDEO_V4L2 && I2C diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index 1e4f832fe1331..720e5b35443a1 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o obj-$(CONFIG_VIDEO_ADV7175) += adv7175.o obj-$(CONFIG_VIDEO_ADV7180) += adv7180.o +obj-$(CONFIG_VIDEO_ADV7181D) += adv7181.o obj-$(CONFIG_VIDEO_ADV7183) += adv7183.o obj-$(CONFIG_VIDEO_ADV7343) += adv7343.o obj-$(CONFIG_VIDEO_ADV7393) += adv7393.o diff --git a/drivers/media/i2c/adv7181.c b/drivers/media/i2c/adv7181.c new file mode 100644 index 0000000000000..82f82a21f4879 --- /dev/null +++ b/drivers/media/i2c/adv7181.c @@ -0,0 +1,550 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * adv7181 driver + * + * Copyright (C) 2018 Fuzhou Rockchip Electronics Co., Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define REG_CHIP_ID 0x11 +#define CHIP_ID 0x20 + +#define REG_SC_CTRL_MODE 0x03 +#define SC_CTRL_MODE_STANDBY 0x4c +#define SC_CTRL_MODE_STREAMING 0x0c + +#define REG_NULL 0xFF + +#define ADV7181_XVCLK_FREQ 24000000 +#define ADV7181_LANES 1 +#define ADV7181_BITS_PER_SAMPLE 10 + +#define ADV7181_SKIP_TOP 24 + +static const char * const adv7181_supply_names[] = { + "dvdd", + "dvddio", +}; + +#define ADV7181_NUM_SUPPLIES ARRAY_SIZE(adv7181_supply_names) + +struct regval { + u8 addr; + u8 val; +}; + +struct adv7181_mode { + u32 width; + u32 height; + const struct regval *reg_list; +}; + +struct adv7181 { + struct i2c_client *client; + struct clk *xvclk; + struct gpio_desc *reset_gpio; + struct regulator_bulk_data supplies[ADV7181_NUM_SUPPLIES]; + + bool streaming; + struct mutex mutex; /* lock to serialize v4l2 callback */ + struct v4l2_subdev subdev; + struct media_pad pad; + + int skip_top; + + const struct adv7181_mode *cur_mode; +}; + +#define to_adv7181(sd) container_of(sd, struct adv7181, subdev) + +/* PLL settings bases on 28M xvclk, resolution 720x480 30fps*/ +static struct regval adv7181_cvbs_30fps[] = { + {0x00, 0x0B}, + {0x04, 0x77}, + {0x17, 0x41}, + {0x1D, 0x47}, + {0x31, 0x02}, + {0x3A, 0x17}, + {0x3B, 0x81}, + {0x3D, 0xA2}, + {0x3E, 0x6A}, + {0x3F, 0xA0}, + {0x86, 0x0B}, + {0xF3, 0x01}, + {0xF9, 0x03}, + {0x0E, 0x80}, + {0x52, 0x46}, + {0x54, 0x80}, + {0x7F, 0xFF}, + {0x81, 0x30}, + {0x90, 0xC9}, + {0x91, 0x40}, + {0x92, 0x3C}, + {0x93, 0xCA}, + {0x94, 0xD5}, + {0xB1, 0xFF}, + {0xB6, 0x08}, + {0xC0, 0x9A}, + {0xCF, 0x50}, + {0xD0, 0x4E}, + {0xD1, 0xB9}, + {0xD6, 0xDD}, + {0xD7, 0xE2}, + {0xE5, 0x51}, + {0xF6, 0x3B}, + {0x0E, 0x00}, + {0x03, 0x4C}, + {REG_NULL, 0x0}, +}; + +static const struct adv7181_mode supported_modes[] = { + { + .width = 720, + .height = 480, + .reg_list = adv7181_cvbs_30fps, + }, +}; + +static int adv7181_write_reg(struct i2c_client *client, u8 reg, u8 val) +{ + int ret; + + ret = i2c_smbus_write_byte_data(client, reg, val); + + if (ret < 0) + dev_err(&client->dev, "write reg error: %d\n", ret); + + return ret; +} + +static int adv7181_write_array(struct i2c_client *client, + const struct regval *regs) +{ + int i, ret = 0; + + for (i = 0; ret == 0 && regs[i].addr != REG_NULL; i++) + ret = adv7181_write_reg(client, regs[i].addr, regs[i].val); + + return ret; +} + +static inline u8 adv7181_read_reg(struct i2c_client *client, u8 reg) +{ + return i2c_smbus_read_byte_data(client, reg); +} + +static void adv7181_fill_fmt(const struct adv7181_mode *mode, + struct v4l2_mbus_framefmt *fmt) +{ + fmt->code = MEDIA_BUS_FMT_UYVY8_2X8; + fmt->width = mode->width; + fmt->height = mode->height; + fmt->field = V4L2_FIELD_NONE; + fmt->colorspace = V4L2_COLORSPACE_SMPTE170M; +} + +static int adv7181_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +{ + struct adv7181 *adv7181 = to_adv7181(sd); + struct v4l2_mbus_framefmt *mbus_fmt = &fmt->format; + + /* only one mode supported for now */ + adv7181_fill_fmt(adv7181->cur_mode, mbus_fmt); + + return 0; +} + +static int adv7181_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +{ + struct adv7181 *adv7181 = to_adv7181(sd); + struct v4l2_mbus_framefmt *mbus_fmt = &fmt->format; + + adv7181_fill_fmt(adv7181->cur_mode, mbus_fmt); + + return 0; +} + +static int adv7181_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_mbus_code_enum *code) +{ + if (code->index >= ARRAY_SIZE(supported_modes)) + return -EINVAL; + + code->code = MEDIA_BUS_FMT_UYVY8_2X8; + + return 0; +} + +static int adv7181_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_frame_size_enum *fse) +{ + u32 index = fse->index; + + if (index >= ARRAY_SIZE(supported_modes)) + return -EINVAL; + + fse->code = MEDIA_BUS_FMT_UYVY8_2X8; + + fse->min_width = supported_modes[index].width; + fse->max_width = supported_modes[index].width; + fse->max_height = supported_modes[index].height; + fse->min_height = supported_modes[index].height; + + return 0; +} + +static int adv7181_g_skip_top_lines(struct v4l2_subdev *sd, u32 *lines) +{ + struct adv7181 *adv7181 = to_adv7181(sd); + + *lines = adv7181->skip_top; + + return 0; +} + +static int adv7181_querystd(struct v4l2_subdev *sd, v4l2_std_id *std) +{ + /* Only NTSC now */ + *std = V4L2_STD_NTSC; + + return 0; +} + +static int __adv7181_power_on(struct adv7181 *adv7181) +{ + int ret; + struct device *dev = &adv7181->client->dev; + + if (!IS_ERR(adv7181->xvclk)) { + ret = clk_prepare_enable(adv7181->xvclk); + if (ret < 0) { + dev_err(dev, "Failed to enable xvclk\n"); + return ret; + } + } + + gpiod_set_value_cansleep(adv7181->reset_gpio, 1); + + ret = regulator_bulk_enable(ADV7181_NUM_SUPPLIES, adv7181->supplies); + if (ret < 0) { + dev_err(dev, "Failed to enable regulators\n"); + goto disable_clk; + } + + gpiod_set_value_cansleep(adv7181->reset_gpio, 0); + + return 0; + +disable_clk: + if (!IS_ERR(adv7181->xvclk)) + clk_disable_unprepare(adv7181->xvclk); + + return ret; +} + +static void __adv7181_power_off(struct adv7181 *adv7181) +{ + if (!IS_ERR(adv7181->xvclk)) + clk_disable_unprepare(adv7181->xvclk); + gpiod_set_value_cansleep(adv7181->reset_gpio, 1); + regulator_bulk_disable(ADV7181_NUM_SUPPLIES, adv7181->supplies); +} + +static int adv7181_s_stream(struct v4l2_subdev *sd, int on) +{ + struct adv7181 *adv7181 = to_adv7181(sd); + struct i2c_client *client = adv7181->client; + int ret = 0; + + mutex_lock(&adv7181->mutex); + + on = !!on; + if (on == adv7181->streaming) + goto unlock_and_return; + + if (on) { + ret = pm_runtime_get_sync(&adv7181->client->dev); + if (ret < 0) { + pm_runtime_put_noidle(&client->dev); + goto unlock_and_return; + } + + ret = adv7181_write_array(adv7181->client, + adv7181->cur_mode->reg_list); + if (ret) { + pm_runtime_put(&client->dev); + goto unlock_and_return; + } + + ret = adv7181_write_reg(client, REG_SC_CTRL_MODE, + SC_CTRL_MODE_STREAMING); + if (ret) { + pm_runtime_put(&client->dev); + goto unlock_and_return; + } + } else { + adv7181_write_reg(client, REG_SC_CTRL_MODE, + SC_CTRL_MODE_STANDBY); + pm_runtime_put(&client->dev); + } + + adv7181->streaming = on; + +unlock_and_return: + mutex_unlock(&adv7181->mutex); + + return ret; +} + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API +static int adv7181_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + struct adv7181 *adv7181 = to_adv7181(sd); + struct v4l2_mbus_framefmt *try_fmt; + + mutex_lock(&adv7181->mutex); + + try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); + /* Initialize try_fmt */ + adv7181_fill_fmt(&supported_modes[0], try_fmt); + + mutex_unlock(&adv7181->mutex); + + return 0; +} +#endif + +static int adv7181_runtime_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct adv7181 *adv7181 = to_adv7181(sd); + + return __adv7181_power_on(adv7181); +} + +static int adv7181_runtime_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct adv7181 *adv7181 = to_adv7181(sd); + + __adv7181_power_off(adv7181); + + return 0; +} + +static const struct dev_pm_ops adv7181_pm_ops = { + SET_RUNTIME_PM_OPS(adv7181_runtime_suspend, + adv7181_runtime_resume, NULL) +}; + +static const struct v4l2_subdev_video_ops adv7181_video_ops = { + .s_stream = adv7181_s_stream, + .querystd = adv7181_querystd, +}; + +static const struct v4l2_subdev_pad_ops adv7181_pad_ops = { + .enum_mbus_code = adv7181_enum_mbus_code, + .enum_frame_size = adv7181_enum_frame_sizes, + .get_fmt = adv7181_get_fmt, + .set_fmt = adv7181_set_fmt, +}; + +static struct v4l2_subdev_sensor_ops adv7181_sensor_ops = { + .g_skip_top_lines = adv7181_g_skip_top_lines, +}; + +static const struct v4l2_subdev_ops adv7181_subdev_ops = { + .video = &adv7181_video_ops, + .pad = &adv7181_pad_ops, + .sensor = &adv7181_sensor_ops, +}; + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API +static const struct v4l2_subdev_internal_ops adv7181_internal_ops = { + .open = adv7181_open, +}; +#endif + +static int adv7181_check_sensor_id(struct adv7181 *adv7181, + struct i2c_client *client) +{ + struct device *dev = &adv7181->client->dev; + u8 id; + + id = adv7181_read_reg(client, REG_CHIP_ID); + + if (id != CHIP_ID) { + dev_err(dev, "Wrong camera sensor id(%04x)\n", id); + return -EINVAL; + } + + dev_info(dev, "Detected ADV7181 (%04x) sensor\n", CHIP_ID); + + return 0; +} + +static int adv7181_configure_regulators(struct adv7181 *adv7181) +{ + u32 i; + + for (i = 0; i < ADV7181_NUM_SUPPLIES; i++) + adv7181->supplies[i].supply = adv7181_supply_names[i]; + + return devm_regulator_bulk_get(&adv7181->client->dev, + ADV7181_NUM_SUPPLIES, + adv7181->supplies); +} + +static int adv7181_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct device *dev = &client->dev; + struct adv7181 *adv7181; + int ret; + + adv7181 = devm_kzalloc(dev, sizeof(*adv7181), GFP_KERNEL); + if (!adv7181) + return -ENOMEM; + + adv7181->skip_top = ADV7181_SKIP_TOP; + + adv7181->client = client; + adv7181->cur_mode = &supported_modes[0]; + + adv7181->xvclk = devm_clk_get(dev, "xvclk"); + if (!IS_ERR(adv7181->xvclk)) { + ret = clk_set_rate(adv7181->xvclk, ADV7181_XVCLK_FREQ); + if (ret < 0) { + dev_err(dev, "Failed to set xvclk rate (24MHz)\n"); + return ret; + } + if (clk_get_rate(adv7181->xvclk) != ADV7181_XVCLK_FREQ) + dev_warn(dev, "xvclk mismatched, it requires 24MHz\n"); + } + + adv7181->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); + if (IS_ERR(adv7181->reset_gpio)) { + dev_err(dev, "Failed to get reset-gpios\n"); + return -EINVAL; + } + + ret = adv7181_configure_regulators(adv7181); + if (ret) { + dev_err(dev, "Failed to get power regulators\n"); + return ret; + } + + mutex_init(&adv7181->mutex); + v4l2_i2c_subdev_init(&adv7181->subdev, client, &adv7181_subdev_ops); + + ret = __adv7181_power_on(adv7181); + if (ret) + goto err_destroy_mutex; + + ret = adv7181_check_sensor_id(adv7181, client); + if (ret) + goto err_power_off; + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + adv7181->subdev.internal_ops = &adv7181_internal_ops; + adv7181->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; +#endif +#if defined(CONFIG_MEDIA_CONTROLLER) + adv7181->pad.flags = MEDIA_PAD_FL_SOURCE; + adv7181->subdev.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR; + ret = media_entity_init(&adv7181->subdev.entity, 1, &adv7181->pad, 0); + if (ret < 0) + goto err_power_off; +#endif + + ret = v4l2_async_register_subdev(&adv7181->subdev); + if (ret) { + dev_err(dev, "v4l2 async register subdev failed\n"); + goto err_clean_entity; + } + + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + pm_runtime_idle(dev); + + return 0; + +err_clean_entity: +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&adv7181->subdev.entity); +#endif +err_power_off: + __adv7181_power_off(adv7181); +err_destroy_mutex: + mutex_destroy(&adv7181->mutex); + + return ret; +} + +static int adv7181_remove(struct i2c_client *client) +{ + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct adv7181 *adv7181 = to_adv7181(sd); + + v4l2_async_unregister_subdev(sd); +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&sd->entity); +#endif + mutex_destroy(&adv7181->mutex); + + pm_runtime_disable(&client->dev); + if (!pm_runtime_status_suspended(&client->dev)) + __adv7181_power_off(adv7181); + pm_runtime_set_suspended(&client->dev); + + return 0; +} + +static const struct i2c_device_id adv7181_id[] = { + {"adv7181", 0}, + {}, +}; + +#if IS_ENABLED(CONFIG_OF) +static const struct of_device_id adv7181_of_match[] = { + { .compatible = "adi,adv7181" }, + {}, +}; +MODULE_DEVICE_TABLE(of, adv7181_of_match); +#endif + +static struct i2c_driver adv7181_i2c_driver = { + .driver = { + .name = "adv7181", + .pm = &adv7181_pm_ops, + .of_match_table = adv7181_of_match + }, + .probe = adv7181_probe, + .remove = adv7181_remove, + .id_table = adv7181_id, +}; + +module_i2c_driver(adv7181_i2c_driver); + +MODULE_DESCRIPTION("adv7181 sensor driver"); +MODULE_LICENSE("GPL v2"); From 82f4463e7ef725427c59c6d53cee127f8b53c475 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Thu, 28 Jun 2018 10:32:44 +0800 Subject: [PATCH 0018/1852] ARM: rk3308_linux_aarch32[_debug]_defconfig: enable KERNEL_LZ4 Compress kernel use LZ4 for faster boot time. zImage larger 15~20%, but save about 75% time. For example: size(byte) time(s) zImage (gz) 2891776 0.177 zImage (lz4) 3334144 0.042 Change-Id: I6a65569bbfc41eb63ee4154df26d055af7aa4ce7 Signed-off-by: Tao Huang --- arch/arm/configs/rk3308_linux_aarch32_debug_defconfig | 1 + arch/arm/configs/rk3308_linux_aarch32_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig index c72571d51e4e2..099793896ea65 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig @@ -1,4 +1,5 @@ # CONFIG_LOCALVERSION_AUTO is not set +CONFIG_KERNEL_LZ4=y CONFIG_DEFAULT_HOSTNAME="localhost" # CONFIG_SWAP is not set CONFIG_SYSVIPC=y diff --git a/arch/arm/configs/rk3308_linux_aarch32_defconfig b/arch/arm/configs/rk3308_linux_aarch32_defconfig index 8bd80726f41b5..cd0f49323385f 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_defconfig @@ -1,4 +1,5 @@ # CONFIG_LOCALVERSION_AUTO is not set +CONFIG_KERNEL_LZ4=y CONFIG_DEFAULT_HOSTNAME="localhost" # CONFIG_SWAP is not set CONFIG_SYSVIPC=y From 19b40633dea14cdaeb2f35aa670cd5b93fe73b1a Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Mon, 2 Jul 2018 18:46:21 +0800 Subject: [PATCH 0019/1852] ARM: rk3308_linux_aarch32[_debug]_defconfig: enable UACCESS_WITH_MEMCPY unixbench fstime read faster 52% Change-Id: I0655db883610d4b2b7d12f279b1df414a2c2d6c4 Signed-off-by: Tao Huang --- arch/arm/configs/rk3308_linux_aarch32_debug_defconfig | 1 + arch/arm/configs/rk3308_linux_aarch32_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig index 099793896ea65..41d9b5f1362f5 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig @@ -32,6 +32,7 @@ CONFIG_HZ_1000=y CONFIG_THUMB2_KERNEL=y # CONFIG_COMPACTION is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +CONFIG_UACCESS_WITH_MEMCPY=y # CONFIG_SWIOTLB is not set CONFIG_CMDLINE="coherent_pool=0 user_debug=31" CONFIG_CMDLINE_EXTEND=y diff --git a/arch/arm/configs/rk3308_linux_aarch32_defconfig b/arch/arm/configs/rk3308_linux_aarch32_defconfig index cd0f49323385f..85d8c4f871bc7 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_defconfig @@ -32,6 +32,7 @@ CONFIG_HZ_1000=y CONFIG_THUMB2_KERNEL=y # CONFIG_COMPACTION is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +CONFIG_UACCESS_WITH_MEMCPY=y # CONFIG_SWIOTLB is not set CONFIG_CMDLINE="coherent_pool=0 loglevel=0" CONFIG_CMDLINE_EXTEND=y From 3a53fbc99f006020efa8a0030dc8034ceed9af93 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Mon, 2 Jul 2018 18:52:17 +0800 Subject: [PATCH 0020/1852] ARM: rk3308_linux_aarch32[_debug]_defconfig: disable CPU_SW_DOMAIN_PAN unixbench fstime read faster 9% Change-Id: Id94cd5e2953202cb0a30c5bee61896b9bdd70a3f Signed-off-by: Tao Huang --- arch/arm/configs/rk3308_linux_aarch32_debug_defconfig | 1 + arch/arm/configs/rk3308_linux_aarch32_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig index 41d9b5f1362f5..09c998d81521e 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig @@ -30,6 +30,7 @@ CONFIG_ARM_PSCI=y CONFIG_PREEMPT=y CONFIG_HZ_1000=y CONFIG_THUMB2_KERNEL=y +# CONFIG_CPU_SW_DOMAIN_PAN is not set # CONFIG_COMPACTION is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 CONFIG_UACCESS_WITH_MEMCPY=y diff --git a/arch/arm/configs/rk3308_linux_aarch32_defconfig b/arch/arm/configs/rk3308_linux_aarch32_defconfig index 85d8c4f871bc7..dc2a6f51b8d16 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_defconfig @@ -30,6 +30,7 @@ CONFIG_ARM_PSCI=y CONFIG_PREEMPT=y CONFIG_HZ_1000=y CONFIG_THUMB2_KERNEL=y +# CONFIG_CPU_SW_DOMAIN_PAN is not set # CONFIG_COMPACTION is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 CONFIG_UACCESS_WITH_MEMCPY=y From 35397d8f54962ac3cc0672cd25dfdf76b59654f1 Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Fri, 29 Jun 2018 10:37:14 +0800 Subject: [PATCH 0021/1852] ASoC: rk3308_codec: using BIST mode switching during loopback This patch using BIST mode switching to fix the glitches during loopback and reset ADCs. Change-Id: Icb9dbd6557736fe555d9f8296369571e78bc6844 Signed-off-by: Xing Zheng --- sound/soc/codecs/rk3308_codec.c | 52 ++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c index 2dfe046b0aead..8ce989f211f1d 100644 --- a/sound/soc/codecs/rk3308_codec.c +++ b/sound/soc/codecs/rk3308_codec.c @@ -54,6 +54,7 @@ #define CODEC_DRV_NAME "rk3308-acodec" #define ADC_LR_GROUP_MAX 4 +#define ADC_STABLE_MS 20 #define DEBUG_POP_ALWAYS 0 #define ENABLE_AGC 0 #define HPDET_POLL_MS 2000 @@ -192,6 +193,8 @@ static const DECLARE_TLV_DB_RANGE(rk3308_codec_adc_3_8_mic_gain_tlv, 3, 3, TLV_DB_MINMAX_ITEM(2000, 2000), ); +static bool has_loopback(int loopback_grp); + static int rk3308_codec_hpout_l_get_tlv(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); static int rk3308_codec_hpout_l_put_tlv(struct snd_kcontrol *kcontrol, @@ -957,6 +960,30 @@ static int rk3308_mute_stream(struct snd_soc_dai *dai, int mute, int stream) #endif } else { #if !DEBUG_POP_ALWAYS + if (has_loopback(rk3308->loopback_grp) && + (rk3308->dac_output == DAC_LINEOUT)) { + int type = ADC_TYPE_LOOPBACK; + int idx, grp; + + /* + * Switch to dummy BIST mode (BIST keep reset + * now) to keep the zero input data in I2S bus. + * + * It may cause the glitch if we hold the ADC + * digtital i2s module in codec. + */ + for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_L_CH_BIST_MSK, + RK3308_ADC_L_CH_BIST_SINE); + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_R_CH_BIST_MSK, + RK3308_ADC_R_CH_BIST_SINE); + } + } + if (rk3308->dac_output == DAC_LINEOUT) rk3308_speaker_ctl(rk3308, 1); else if (rk3308->dac_output == DAC_HPOUT) @@ -2920,13 +2947,30 @@ static void rk3308_codec_loopback_work(struct work_struct *work) { struct rk3308_codec_priv *rk3308 = container_of(work, struct rk3308_codec_priv, loopback_work.work); + int type = ADC_TYPE_LOOPBACK; + int idx, grp; /* Reset ADC quickly */ - rk3308_codec_alc_disable(rk3308, ADC_TYPE_LOOPBACK); - rk3308_codec_adc_ana_disable(rk3308, ADC_TYPE_LOOPBACK); + rk3308_codec_alc_disable(rk3308, type); + rk3308_codec_adc_ana_disable(rk3308, type); - rk3308_codec_alc_enable(rk3308, ADC_TYPE_LOOPBACK); - rk3308_codec_adc_ana_enable(rk3308, ADC_TYPE_LOOPBACK); + rk3308_codec_alc_enable(rk3308, type); + rk3308_codec_adc_ana_enable(rk3308, type); + + /* Waiting ADCs are stable */ + msleep(ADC_STABLE_MS); + + /* Recover normal mode after enable ADCs */ + for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_L_CH_BIST_MSK, + RK3308_ADC_L_CH_NORMAL_LEFT); + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_R_CH_BIST_MSK, + RK3308_ADC_R_CH_NORMAL_RIGHT); + } } static irqreturn_t rk3308_codec_hpdet_isr(int irq, void *data) From 097dca52a45ba19a900599f7e894699f52840539 Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Fri, 29 Jun 2018 20:20:27 +0800 Subject: [PATCH 0022/1852] ASoC: rk3308_codec: operate loopback ADCs during LINEOUT We need to operate loopback ADCs during LINEOUT enable or disable that it make ensure enable ADCs more smoothly. Therefore, we don't need to reset loopback ADCs in rk3308_codec_loopback_work(), and separete reinit-mics from adc_ana_enable(). Change-Id: Id26dd5ad00c527be47a706df58c435f12d46c281 Signed-off-by: Xing Zheng --- sound/soc/codecs/rk3308_codec.c | 163 ++++++++++++++++++++++++++++---- 1 file changed, 143 insertions(+), 20 deletions(-) diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c index 8ce989f211f1d..2ae3d2a911023 100644 --- a/sound/soc/codecs/rk3308_codec.c +++ b/sound/soc/codecs/rk3308_codec.c @@ -53,6 +53,7 @@ #define CODEC_DRV_NAME "rk3308-acodec" +#define ADC_GRP_SKIP_MAGIC 0x1001 #define ADC_LR_GROUP_MAX 4 #define ADC_STABLE_MS 20 #define DEBUG_POP_ALWAYS 0 @@ -159,6 +160,7 @@ struct rk3308_codec_priv { bool enable_all_adcs; bool hp_plugged; + bool loopback_dacs_enabled; bool no_deep_low_power; struct delayed_work hpdet_work; struct delayed_work loopback_work; @@ -571,7 +573,18 @@ static bool adc_for_each_grp(struct rk3308_codec_priv *rk3308, if (idx >= max_grps) return false; - *grp = rk3308->i2s_sdis[idx]; + if ((!rk3308->loopback_dacs_enabled) && + has_loopback(rk3308->loopback_grp) && + rk3308->loopback_grp == idx) { + /* + * Ths loopback DACs are closed, and specify the + * loopback ADCs. + */ + *grp = ADC_GRP_SKIP_MAGIC; + } else { + *grp = rk3308->i2s_sdis[idx]; + } + dev_dbg(rk3308->plat_dev, "ADC_TYPE_NORMAL, idx: %d, get grp: %d\n", idx, *grp); @@ -1994,6 +2007,9 @@ static int rk3308_codec_alc_enable(struct rk3308_codec_priv *rk3308, int type) * These values are estimated */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ALC_L_DIG_CON05(grp), RK3308_AGC_LO_8BITS_AGC_MAX_MSK, 0x26); @@ -2029,6 +2045,9 @@ static int rk3308_codec_alc_enable(struct rk3308_codec_priv *rk3308, int type) * By default is 44.1KHz for sample. */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ALC_L_DIG_CON04(grp), RK3308_AGC_APPROX_RATE_MSK, RK3308_AGC_APPROX_RATE_44_1K); @@ -2041,6 +2060,9 @@ static int rk3308_codec_alc_enable(struct rk3308_codec_priv *rk3308, int type) #if ENABLE_AGC /* 3. Set ACODEC_ALC_DIG_CON9[6] to 0x1, to enable the ALC module */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ALC_L_DIG_CON09(grp), RK3308_AGC_FUNC_SEL_MSK, RK3308_AGC_FUNC_SEL_EN); @@ -2056,6 +2078,9 @@ static int rk3308_codec_alc_enable(struct rk3308_codec_priv *rk3308, int type) * to 0x3, to enable the ALC module to control the gain of PGA. */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON11(grp), RK3308_ADC_ALCL_CON_GAIN_PGAL_MSK | RK3308_ADC_ALCR_CON_GAIN_PGAR_MSK, @@ -2114,6 +2139,9 @@ static int rk3308_codec_adc_reinit_mics(struct rk3308_codec_priv *rk3308, int idx, grp; for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + /* vendor step 1 */ regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON05(grp), RK3308_ADC_CH1_ADC_WORK | @@ -2123,6 +2151,9 @@ static int rk3308_codec_adc_reinit_mics(struct rk3308_codec_priv *rk3308, } for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + /* vendor step 2 */ regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON02(grp), RK3308_ADC_CH1_ALC_WORK | @@ -2132,6 +2163,9 @@ static int rk3308_codec_adc_reinit_mics(struct rk3308_codec_priv *rk3308, } for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + /* vendor step 3 */ regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON00(grp), RK3308_ADC_CH1_MIC_WORK | @@ -2143,6 +2177,9 @@ static int rk3308_codec_adc_reinit_mics(struct rk3308_codec_priv *rk3308, usleep_range(200, 250); /* estimated value */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + /* vendor step 1 */ regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON05(grp), RK3308_ADC_CH1_ADC_WORK | @@ -2152,6 +2189,9 @@ static int rk3308_codec_adc_reinit_mics(struct rk3308_codec_priv *rk3308, } for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + /* vendor step 2 */ regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON02(grp), RK3308_ADC_CH1_ALC_WORK | @@ -2161,6 +2201,9 @@ static int rk3308_codec_adc_reinit_mics(struct rk3308_codec_priv *rk3308, } for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + /* vendor step 3 */ regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON00(grp), RK3308_ADC_CH1_MIC_WORK | @@ -2195,7 +2238,7 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* Keep other ADCs as MIC-IN */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { /* The groups without line-in are >= 1 */ - if (grp < 1) + if (grp < 1 || grp == ADC_GRP_SKIP_MAGIC) continue; regmap_update_bits(rk3308->regmap, @@ -2207,6 +2250,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, } } else { for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON07(grp), RK3308_ADC_CH1_IN_SEL_MSK | @@ -2222,6 +2268,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, * buffer, and to end the initialization of MIC */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON00(grp), RK3308_ADC_CH1_MIC_UNMUTE | RK3308_ADC_CH2_MIC_UNMUTE, @@ -2234,6 +2283,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, * of audio */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON06(grp), RK3308_ADC_CURRENT_MSK, RK3308_ADC_CURRENT_EN); @@ -2241,6 +2293,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 4*/ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON00(grp), RK3308_ADC_CH1_BUF_REF_EN | RK3308_ADC_CH2_BUF_REF_EN, @@ -2250,6 +2305,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 5 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON00(grp), RK3308_ADC_CH1_MIC_EN | RK3308_ADC_CH2_MIC_EN, @@ -2259,6 +2317,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 6 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON02(grp), RK3308_ADC_CH1_ALC_EN | RK3308_ADC_CH2_ALC_EN, @@ -2268,6 +2329,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 7 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON05(grp), RK3308_ADC_CH1_CLK_EN | RK3308_ADC_CH2_CLK_EN, @@ -2277,6 +2341,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 8 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON05(grp), RK3308_ADC_CH1_ADC_EN | RK3308_ADC_CH2_ADC_EN, @@ -2286,6 +2353,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 9 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON05(grp), RK3308_ADC_CH1_ADC_WORK | RK3308_ADC_CH2_ADC_WORK, @@ -2295,6 +2365,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 10 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON02(grp), RK3308_ADC_CH1_ALC_WORK | RK3308_ADC_CH2_ALC_WORK, @@ -2304,6 +2377,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 11 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON00(grp), RK3308_ADC_CH1_MIC_WORK | RK3308_ADC_CH2_MIC_WORK, @@ -2317,6 +2393,9 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, /* vendor step 14 */ for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + if (grp == ADC_GRP_SKIP_MAGIC) + continue; + regmap_read(rk3308->regmap, RK3308_ALC_L_DIG_CON09(grp), &agc_func_en); if (rk3308->adc_zerocross || @@ -2337,11 +2416,6 @@ static int rk3308_codec_adc_ana_enable(struct rk3308_codec_priv *rk3308, } } - /* vendor step 15, re-init mic */ - rk3308_codec_adc_reinit_mics(rk3308, type); - - /* vendor step 16 Begin recording */ - return 0; } @@ -2448,6 +2522,7 @@ static int rk3308_codec_open_capture(struct rk3308_codec_priv *rk3308) rk3308_codec_alc_enable(rk3308, type); rk3308_codec_adc_ana_enable(rk3308, type); + rk3308_codec_adc_reinit_mics(rk3308, type); if (rk3308->adc_grp0_using_linein) { regmap_update_bits(rk3308->regmap, RK3308_ADC_DIG_CON03(0), @@ -2621,6 +2696,10 @@ static int rk3308_hw_params(struct snd_pcm_substream *substream, { struct snd_soc_codec *codec = dai->codec; struct rk3308_codec_priv *rk3308 = snd_soc_codec_get_drvdata(codec); + struct snd_pcm_str *playback_str = + &substream->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK]; + int type = ADC_TYPE_LOOPBACK; + int idx, grp; int ret; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { @@ -2634,6 +2713,33 @@ static int rk3308_hw_params(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* Check the DACs are opened */ + if (playback_str->substream_opened) { + rk3308->loopback_dacs_enabled = true; + for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_L_CH_BIST_MSK, + RK3308_ADC_L_CH_NORMAL_LEFT); + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_R_CH_BIST_MSK, + RK3308_ADC_R_CH_NORMAL_RIGHT); + } + } else { + rk3308->loopback_dacs_enabled = false; + for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_L_CH_BIST_MSK, + RK3308_ADC_L_CH_BIST_SINE); + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_R_CH_BIST_MSK, + RK3308_ADC_R_CH_BIST_SINE); + } + } + rk3308_codec_open_capture(rk3308); rk3308_codec_adc_dig_config(rk3308, params); } @@ -2646,18 +2752,38 @@ static int rk3308_pcm_trigger(struct snd_pcm_substream *substream, { struct snd_soc_codec *codec = dai->codec; struct rk3308_codec_priv *rk3308 = snd_soc_codec_get_drvdata(codec); + int type = ADC_TYPE_LOOPBACK; + int idx, grp; if (has_loopback(rk3308->loopback_grp) && rk3308->dac_output == DAC_LINEOUT && - substream->stream == SNDRV_PCM_STREAM_PLAYBACK && - cmd == SNDRV_PCM_TRIGGER_START) { - struct snd_pcm_str *capture_str = - &substream->pcm->streams[SNDRV_PCM_STREAM_CAPTURE]; - - if (capture_str->substream_opened) - queue_delayed_work(system_power_efficient_wq, - &rk3308->loopback_work, - msecs_to_jiffies(LOOPBACK_HANDLE_MS)); + substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + if (cmd == SNDRV_PCM_TRIGGER_START) { + struct snd_pcm_str *capture_str = + &substream->pcm->streams[SNDRV_PCM_STREAM_CAPTURE]; + + if (capture_str->substream_opened) + queue_delayed_work(system_power_efficient_wq, + &rk3308->loopback_work, + msecs_to_jiffies(LOOPBACK_HANDLE_MS)); + } else if (cmd == SNDRV_PCM_TRIGGER_STOP) { + /* + * Switch to dummy bist mode to kick the glitch during disable + * ADCs and keep zero input data + */ + for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_L_CH_BIST_MSK, + RK3308_ADC_L_CH_BIST_SINE); + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_R_CH_BIST_MSK, + RK3308_ADC_R_CH_BIST_SINE); + } + rk3308_codec_alc_disable(rk3308, ADC_TYPE_LOOPBACK); + rk3308_codec_adc_ana_disable(rk3308, ADC_TYPE_LOOPBACK); + } } return 0; @@ -2950,10 +3076,7 @@ static void rk3308_codec_loopback_work(struct work_struct *work) int type = ADC_TYPE_LOOPBACK; int idx, grp; - /* Reset ADC quickly */ - rk3308_codec_alc_disable(rk3308, type); - rk3308_codec_adc_ana_disable(rk3308, type); - + /* Prepare loopback ADCs */ rk3308_codec_alc_enable(rk3308, type); rk3308_codec_adc_ana_enable(rk3308, type); From f23fff2c263f19db0b7c2f15ab05d20edb18d7cc Mon Sep 17 00:00:00 2001 From: Elaine Zhang Date: Fri, 29 Jun 2018 15:33:35 +0800 Subject: [PATCH 0023/1852] clk: rockchip: rk3399: remove the flag ROCKCHIP_PLL_SYNC_RATE for GPLL Change-Id: I569a6033fdd9902c8a48b7aa93b1785ebac426ae Signed-off-by: Elaine Zhang --- drivers/clk/rockchip/clk-rk3399.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c index 3bff8b9b2bb3d..6dea2bdd711cd 100644 --- a/drivers/clk/rockchip/clk-rk3399.c +++ b/drivers/clk/rockchip/clk-rk3399.c @@ -315,7 +315,7 @@ static struct rockchip_pll_clock rk3399_pll_clks[] __initdata = { RK3399_PLL_CON(27), 8, 31, ROCKCHIP_PLL_SYNC_RATE, rk3399_pll_rates), #endif [gpll] = PLL(pll_rk3399, PLL_GPLL, "gpll", mux_pll_p, 0, RK3399_PLL_CON(32), - RK3399_PLL_CON(35), 8, 31, ROCKCHIP_PLL_SYNC_RATE, rk3399_pll_rates), + RK3399_PLL_CON(35), 8, 31, 0, rk3399_pll_rates), [npll] = PLL(pll_rk3399, PLL_NPLL, "npll", mux_pll_p, 0, RK3399_PLL_CON(40), RK3399_PLL_CON(43), 8, 31, ROCKCHIP_PLL_SYNC_RATE, rk3399_pll_rates), [vpll] = PLL(pll_rk3399, PLL_VPLL, "vpll", mux_pll_p, 0, RK3399_PLL_CON(48), From 84b2fd49fc4c982e606a46d5d4799d1a7713b4d9 Mon Sep 17 00:00:00 2001 From: Hans Yang Date: Mon, 2 Jul 2018 16:16:31 +0800 Subject: [PATCH 0024/1852] arm: configs: rk3308_linux_aarch32[_debug]_defconfig: enable initrd support Change-Id: I1c222681dcb998efd45cf8d59e5592375d356f66 Signed-off-by: Hans Yang --- arch/arm/configs/rk3308_linux_aarch32_debug_defconfig | 6 ++++++ arch/arm/configs/rk3308_linux_aarch32_defconfig | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig index 09c998d81521e..973cee6d34827 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_debug_defconfig @@ -7,6 +7,12 @@ CONFIG_FHANDLE=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_LOG_CPU_MAX_BUF_SHIFT=0 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_XZ is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y # CONFIG_BASE_FULL is not set CONFIG_EMBEDDED=y diff --git a/arch/arm/configs/rk3308_linux_aarch32_defconfig b/arch/arm/configs/rk3308_linux_aarch32_defconfig index dc2a6f51b8d16..04378de8971ce 100644 --- a/arch/arm/configs/rk3308_linux_aarch32_defconfig +++ b/arch/arm/configs/rk3308_linux_aarch32_defconfig @@ -7,6 +7,12 @@ CONFIG_FHANDLE=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_LOG_CPU_MAX_BUF_SHIFT=0 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_XZ is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y # CONFIG_BASE_FULL is not set CONFIG_EMBEDDED=y From 06514750dff246951256ca156ea28f5566355643 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Mon, 2 Jul 2018 19:46:12 +0800 Subject: [PATCH 0025/1852] ASoC: rockchip: vad: fix snd_pcm_vad_attached crash This patch fix snd_pcm_vad_attached crash when using non-soc audio, such as usb audio, pci audio. it is because substream private_data in these types of audio framework means different values. Change-Id: I5dcd3ea7de363bc3afc8d9879a2a37c6d6110a4a Signed-off-by: Sugar Zhang --- sound/soc/rockchip/rockchip_vad.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sound/soc/rockchip/rockchip_vad.c b/sound/soc/rockchip/rockchip_vad.c index 08a7bdd8c620f..4233377065819 100644 --- a/sound/soc/rockchip/rockchip_vad.c +++ b/sound/soc/rockchip/rockchip_vad.c @@ -33,6 +33,7 @@ #define ACODEC_REG_NUM 28 #define VAD_SRAM_BUFFER_END 0xfffbfff8 +static struct snd_pcm_substream *vad_substream; static unsigned int voice_inactive_frames; module_param(voice_inactive_frames, uint, 0644); MODULE_PARM_DESC(voice_inactive_frames, "voice inactive frame count"); @@ -306,7 +307,8 @@ bool snd_pcm_vad_attached(struct snd_pcm_substream *substream) { struct rockchip_vad *vad = NULL; - vad = substream_get_drvdata(substream); + if (vad_substream == substream) + vad = substream_get_drvdata(substream); return vad ? true : false; } @@ -572,6 +574,14 @@ static int rockchip_vad_enable_cpudai(struct snd_pcm_substream *substream) return ret; } +static int rockchip_vad_pcm_startup(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + vad_substream = substream; + + return 0; +} + static void rockchip_vad_pcm_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { @@ -583,6 +593,8 @@ static void rockchip_vad_pcm_shutdown(struct snd_pcm_substream *substream, rockchip_vad_enable_cpudai(substream); rockchip_vad_setup(vad); + + vad_substream = NULL; } static int rockchip_vad_trigger(struct snd_pcm_substream *substream, int cmd, @@ -613,6 +625,7 @@ static int rockchip_vad_trigger(struct snd_pcm_substream *substream, int cmd, static struct snd_soc_dai_ops rockchip_vad_dai_ops = { .hw_params = rockchip_vad_hw_params, .shutdown = rockchip_vad_pcm_shutdown, + .startup = rockchip_vad_pcm_startup, .trigger = rockchip_vad_trigger, }; From 9bd8ee1833cb9698991e5dd1939937573a61222f Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 3 Jul 2018 11:02:16 +0800 Subject: [PATCH 0026/1852] ASoC: rockchip: vad: add support for 'rockchip,acodec-cfg' rockchip,acodec-cfg: config acodec after voice activity detection. Change-Id: I8786688df872e258dd96144130aaacdbf1d99ce3 Signed-off-by: Sugar Zhang --- Documentation/devicetree/bindings/sound/rockchip,vad.txt | 3 +++ sound/soc/rockchip/rockchip_vad.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/rockchip,vad.txt b/Documentation/devicetree/bindings/sound/rockchip,vad.txt index 83ffa22608eb6..549a30216f835 100644 --- a/Documentation/devicetree/bindings/sound/rockchip,vad.txt +++ b/Documentation/devicetree/bindings/sound/rockchip,vad.txt @@ -16,6 +16,9 @@ Required properties: - 1: begin to store the data after vad is enabled. - 2: don't store the data. +Optional properties: +- rockchip,acodec-cfg: boolean, config acodec after voice activity detection. + Example for rk3308 VAD controller: vad: vad@ff3c0000 { diff --git a/sound/soc/rockchip/rockchip_vad.c b/sound/soc/rockchip/rockchip_vad.c index 4233377065819..291451d64629c 100644 --- a/sound/soc/rockchip/rockchip_vad.c +++ b/sound/soc/rockchip/rockchip_vad.c @@ -65,6 +65,7 @@ struct rockchip_vad { u32 buffer_time; /* msec */ struct dentry *debugfs_dir; void *buf; + bool acodec_cfg; }; struct audio_src_addr_map { @@ -421,6 +422,9 @@ static int rockchip_vad_config_acodec(struct snd_pcm_hw_params *params, struct rockchip_vad *vad = snd_soc_codec_get_drvdata(codec); unsigned int val = 0; + if (!vad->acodec_cfg) + return 0; + val = ACODEC_BASE + ACODEC_ADC_ANA_CON0; regmap_write(vad->regmap, VAD_ID_ADDR, val); @@ -742,6 +746,7 @@ static int rockchip_vad_probe(struct platform_device *pdev) vad->dev = &pdev->dev; + vad->acodec_cfg = of_property_read_bool(np, "rockchip,acodec-cfg"); of_property_read_u32(np, "rockchip,mode", &vad->mode); of_property_read_u32(np, "rockchip,det-channel", &vad->audio_chnl); of_property_read_u32(np, "rockchip,buffer-time-ms", &vad->buffer_time); From 295e66c501e502ea5199b839f947a23340f16c16 Mon Sep 17 00:00:00 2001 From: Wu Liangqing Date: Tue, 3 Jul 2018 09:52:53 +0800 Subject: [PATCH 0027/1852] arm64: dts: rockchip: px30-evb-ddr3-v10: vcc_3v0 regulator-on-in-suspend According to the hardware design, wifi and rmii cannot be powered off in deepsleep Change-Id: Id44ef9b31c34b6f12695dbf3fbb843950602ca71 Signed-off-by: Wu Liangqing --- arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts index 2b34f7a39cfb8..17b6a0cd9dba4 100644 --- a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts @@ -438,7 +438,7 @@ regulator-initial-mode = <0x2>; regulator-name = "vcc_3v0"; regulator-state-mem { - regulator-off-in-suspend; + regulator-on-in-suspend; regulator-suspend-microvolt = <3000000>; }; }; From 8ceb88078734585e349a73030b392ba061f7176d Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Mon, 2 Jul 2018 18:26:16 +0800 Subject: [PATCH 0028/1852] input: touchscreen: gt1x: Fix some warnings reported by jenkins Change-Id: Ibae24626d24d9a358285d9fd8693229b87e7a1e1 Signed-off-by: Jeffy Chen --- drivers/input/touchscreen/gt1x/gt1x.c | 18 ++++------ drivers/input/touchscreen/gt1x/gt1x_generic.c | 35 +------------------ 2 files changed, 8 insertions(+), 45 deletions(-) diff --git a/drivers/input/touchscreen/gt1x/gt1x.c b/drivers/input/touchscreen/gt1x/gt1x.c index 75896a9e6215a..337a4c2ac3433 100644 --- a/drivers/input/touchscreen/gt1x/gt1x.c +++ b/drivers/input/touchscreen/gt1x/gt1x.c @@ -373,25 +373,21 @@ static s32 gt1x_request_io_port(void) ret = gpio_request(GTP_INT_PORT, "GTP_INT_IRQ"); if (ret < 0) { GTP_ERROR("Failed to request GPIO:%d, ERRNO:%d", (s32) GTP_INT_PORT, ret); - ret = -ENODEV; - } else { - GTP_GPIO_AS_INT(GTP_INT_PORT); - gt1x_i2c_client->irq = GTP_INT_IRQ; + return ret; } + GTP_GPIO_AS_INT(GTP_INT_PORT); + gt1x_i2c_client->irq = GTP_INT_IRQ; + ret = gpio_request(GTP_RST_PORT, "GTP_RST_PORT"); if (ret < 0) { GTP_ERROR("Failed to request GPIO:%d, ERRNO:%d", (s32) GTP_RST_PORT, ret); - ret = -ENODEV; - } - - GTP_GPIO_AS_INPUT(GTP_RST_PORT); - if (ret < 0) { - gpio_free(GTP_RST_PORT); gpio_free(GTP_INT_PORT); + return ret; } - return ret; + GTP_GPIO_AS_INPUT(GTP_RST_PORT); + return 0; } /** diff --git a/drivers/input/touchscreen/gt1x/gt1x_generic.c b/drivers/input/touchscreen/gt1x/gt1x_generic.c index fc7aa021a5234..98d2790949e73 100644 --- a/drivers/input/touchscreen/gt1x/gt1x_generic.c +++ b/drivers/input/touchscreen/gt1x/gt1x_generic.c @@ -504,35 +504,6 @@ s32 gt1x_i2c_read_dbl_check(u16 addr, u8 *buffer, s32 len) return 1; } -/** - * gt1x_get_info - Get information from ic, such as resolution and - * int trigger type - * Return <0: i2c failed, 0: i2c ok - */ -s32 gt1x_get_info(void) -{ - u8 opr_buf[4] = { 0 }; - s32 ret = 0; - - ret = gt1x_i2c_read(GTP_REG_CONFIG_DATA + 1, opr_buf, 4); - if (ret < 0) { - return ret; - } - - gt1x_abs_x_max = (opr_buf[1] << 8) + opr_buf[0]; - gt1x_abs_y_max = (opr_buf[3] << 8) + opr_buf[2]; - - ret = gt1x_i2c_read(GTP_REG_CONFIG_DATA + 6, opr_buf, 1); - if (ret < 0) { - return ret; - } - gt1x_int_type = opr_buf[0] & 0x03; - - GTP_INFO("X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x", gt1x_abs_x_max, gt1x_abs_y_max, gt1x_int_type); - - return 0; -} - /** * gt1x_send_cfg - Send gt1x_config Function. * @config: pointer of the configuration array. @@ -843,7 +814,7 @@ s32 gt1x_read_version(struct gt1x_version_info *ver_info) u8 product_id[5] = { 0 }; u8 sensor_id = 0; u8 match_opt = 0; - int i, retry = 3; + unsigned int i, retry = 3; u8 checksum = 0; GTP_DEBUG_FUNC(); @@ -944,9 +915,7 @@ static s32 gt1x_enter_sleep(void) gt1x_power_switch(SWITCH_OFF); return 0; #else - int ret; { - int ret; s32 retry = 0; if (gt1x_wakeup_level == 1) { /* high level wakeup */ GTP_GPIO_OUTPUT(GTP_INT_PORT, 0); @@ -956,8 +925,6 @@ static s32 gt1x_enter_sleep(void) while (retry++ < 3) { if (!gt1x_send_cmd(GTP_CMD_SLEEP, 0)) { GTP_INFO("Enter sleep mode!"); - if (ret < 0) - GTP_ERROR("disable power-supply error %d\n", ret); return 0; } msleep(10); From 7cedc224c6b1b17702fcf6ab3bcbee91cbc4925c Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Mon, 2 Jul 2018 18:27:04 +0800 Subject: [PATCH 0029/1852] input: touchscreen: gt1x: Change msleep to usleep_range for small msecs The msleep < 20ms can sleep for up to 20ms, see: Documentation/timers/timers-howto.txt. Change msleep to usleep_range for this case. Change-Id: Ibb680b766b6c7317fc1f13dfda7457ef771b4272 Signed-off-by: Jeffy Chen --- drivers/input/touchscreen/gt1x/gt1x_extents.c | 2 +- drivers/input/touchscreen/gt1x/gt1x_generic.c | 16 ++++++++-------- drivers/input/touchscreen/gt1x/gt1x_update.c | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/input/touchscreen/gt1x/gt1x_extents.c b/drivers/input/touchscreen/gt1x/gt1x_extents.c index aeb5f2e5649db..dc16c91ad98a2 100644 --- a/drivers/input/touchscreen/gt1x/gt1x_extents.c +++ b/drivers/input/touchscreen/gt1x/gt1x_extents.c @@ -145,7 +145,7 @@ int gesture_enter_doze(void) GTP_DEBUG("Working in doze mode!"); return 0; } - msleep(10); + usleep_range(10000, 11000); } GTP_ERROR("Send doze cmd failed."); return -1; diff --git a/drivers/input/touchscreen/gt1x/gt1x_generic.c b/drivers/input/touchscreen/gt1x/gt1x_generic.c index 98d2790949e73..c7a036b645697 100644 --- a/drivers/input/touchscreen/gt1x/gt1x_generic.c +++ b/drivers/input/touchscreen/gt1x/gt1x_generic.c @@ -455,7 +455,7 @@ static s32 gt1x_i2c_test(void) return ret; } - msleep(10); + usleep_range(10000, 11000); GTP_ERROR("Hardware Info:%08X", hw_info); GTP_ERROR("I2c failed%d.", retry); } @@ -489,7 +489,7 @@ s32 gt1x_i2c_read_dbl_check(u16 addr, u8 *buffer, s32 len) return ret; } - msleep(5); + usleep_range(5000, 6000); memset(confirm_buf, 0, sizeof(confirm_buf)); ret = gt1x_i2c_read(addr, confirm_buf, len); if (ret < 0) { @@ -660,9 +660,9 @@ void gt1x_select_addr(void) { GTP_GPIO_OUTPUT(GTP_RST_PORT, 0); GTP_GPIO_OUTPUT(GTP_INT_PORT, gt1x_i2c_client->addr == 0x14); - msleep(2); + usleep_range(2000, 3000); GTP_GPIO_OUTPUT(GTP_RST_PORT, 1); - msleep(2); + usleep_range(2000, 3000); } static s32 gt1x_set_reset_status(void) @@ -786,7 +786,7 @@ s32 gt1x_reset_guitar(void) return ret; #else gt1x_select_addr(); - msleep(8); /* must >= 6ms */ + usleep_range(8000, 9000); /* must >= 6ms */ #endif /* int synchronization */ @@ -920,14 +920,14 @@ static s32 gt1x_enter_sleep(void) if (gt1x_wakeup_level == 1) { /* high level wakeup */ GTP_GPIO_OUTPUT(GTP_INT_PORT, 0); } - msleep(5); + usleep_range(5000, 6000); while (retry++ < 3) { if (!gt1x_send_cmd(GTP_CMD_SLEEP, 0)) { GTP_INFO("Enter sleep mode!"); return 0; } - msleep(10); + usleep_range(10000, 11000); } GTP_ERROR("Enter sleep mode failed."); @@ -970,7 +970,7 @@ static s32 gt1x_wakeup_sleep(void) { /* wake up through int port */ GTP_GPIO_OUTPUT(GTP_INT_PORT, gt1x_wakeup_level); - msleep(5); + usleep_range(5000, 6000); /* Synchronize int IO */ GTP_GPIO_OUTPUT(GTP_INT_PORT, 0); diff --git a/drivers/input/touchscreen/gt1x/gt1x_update.c b/drivers/input/touchscreen/gt1x/gt1x_update.c index 50ba3c208cdc4..295462a80a203 100644 --- a/drivers/input/touchscreen/gt1x/gt1x_update.c +++ b/drivers/input/touchscreen/gt1x/gt1x_update.c @@ -1026,7 +1026,7 @@ int gt1x_burn_subsystem(struct fw_subsystem_info *subsystem) } burn_state = ERROR; wait_time = 200; - msleep(5); + usleep_range(5000, 6000); while (wait_time-- > 0) { u8 confirm = 0x55; @@ -1035,7 +1035,7 @@ int gt1x_burn_subsystem(struct fw_subsystem_info *subsystem) if (ret < 0) { continue; } - msleep(5); + usleep_range(5000, 6000); ret = gt1x_i2c_read(0x8022, &confirm, 1); if (ret < 0) { continue; @@ -1148,7 +1148,7 @@ int gt1x_read_flash(u32 addr, int length) wait_time = 200; while (wait_time > 0) { wait_time--; - msleep(5); + usleep_range(5000, 6000); ret = gt1x_i2c_read_dbl_check(0x8022, buffer, 1); if (ret) { continue; @@ -1257,7 +1257,7 @@ int gt1x_error_erase(void) wait_time = 200; while (wait_time > 0) { wait_time--; - msleep(5); + usleep_range(5000, 6000); ret = gt1x_i2c_read_dbl_check(0x8022, buffer, 1); if (ret) continue; From 181227ee5bc9d700306aeda3828c3c794681a7fd Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Mon, 2 Jul 2018 18:28:06 +0800 Subject: [PATCH 0030/1852] input: touchscreen: gt1x: Make power ctrl optional Some boards don't need to control power supply. Let's make it optional. Change-Id: Ifd72a7c3704cdc0df4f2d2096278a6b58f925e8d Signed-off-by: Jeffy Chen --- drivers/input/touchscreen/gt1x/gt1x.c | 4 ++ drivers/input/touchscreen/gt1x/gt1x_generic.c | 58 +++++++++---------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/drivers/input/touchscreen/gt1x/gt1x.c b/drivers/input/touchscreen/gt1x/gt1x.c index 337a4c2ac3433..c14581113b927 100644 --- a/drivers/input/touchscreen/gt1x/gt1x.c +++ b/drivers/input/touchscreen/gt1x/gt1x.c @@ -316,6 +316,10 @@ static int gt1x_parse_dt(struct device *dev) if (PTR_ERR(vdd_ana) == -ENODEV) { GTP_ERROR("vdd_ana not specified, fallback to power-supply"); vdd_ana = devm_regulator_get_optional(dev, "power"); + if (PTR_ERR(vdd_ana) == -ENODEV) { + GTP_ERROR("power not specified, ignore power ctrl"); + vdd_ana = NULL; + } } if (IS_ERR(vdd_ana)) { GTP_ERROR("regulator get of vdd_ana/power-supply failed"); diff --git a/drivers/input/touchscreen/gt1x/gt1x_generic.c b/drivers/input/touchscreen/gt1x/gt1x_generic.c index c7a036b645697..893815090ad8c 100644 --- a/drivers/input/touchscreen/gt1x/gt1x_generic.c +++ b/drivers/input/touchscreen/gt1x/gt1x_generic.c @@ -439,7 +439,6 @@ s32 _do_i2c_write(struct i2c_msg *msg, u16 addr, u8 *buffer, s32 len) return 0; } -#if !GTP_POWER_CTRL_SLEEP #if !GTP_ESD_PROTECT static s32 gt1x_i2c_test(void) { @@ -463,7 +462,6 @@ static s32 gt1x_i2c_test(void) return ERROR_RETRY; } #endif -#endif /** * gt1x_i2c_read_dbl_check - read twice and double check @@ -911,29 +909,30 @@ s32 gt1x_get_chip_type(void) */ static s32 gt1x_enter_sleep(void) { + s32 retry = 0; + #if GTP_POWER_CTRL_SLEEP - gt1x_power_switch(SWITCH_OFF); - return 0; -#else - { - s32 retry = 0; - if (gt1x_wakeup_level == 1) { /* high level wakeup */ - GTP_GPIO_OUTPUT(GTP_INT_PORT, 0); - } - usleep_range(5000, 6000); + if (!gt1x_power_switch(SWITCH_OFF)) { + GTP_INFO("Enter sleep mode by poweroff"); + return 0; + } +#endif - while (retry++ < 3) { - if (!gt1x_send_cmd(GTP_CMD_SLEEP, 0)) { - GTP_INFO("Enter sleep mode!"); - return 0; - } - usleep_range(10000, 11000); - } + if (gt1x_wakeup_level == 1) { /* high level wakeup */ + GTP_GPIO_OUTPUT(GTP_INT_PORT, 0); + } + usleep_range(5000, 6000); - GTP_ERROR("Enter sleep mode failed."); - return -1; + while (retry++ < 3) { + if (!gt1x_send_cmd(GTP_CMD_SLEEP, 0)) { + GTP_INFO("Enter sleep mode!"); + return 0; + } + usleep_range(10000, 11000); } -#endif + + GTP_ERROR("Enter sleep mode failed."); + return -1; } /** @@ -943,20 +942,22 @@ static s32 gt1x_enter_sleep(void) */ static s32 gt1x_wakeup_sleep(void) { -#if !GTP_POWER_CTRL_SLEEP u8 retry = 0; s32 ret = -1; int flag = 0; -#endif + GTP_DEBUG("Wake up begin."); gt1x_irq_disable(); #if GTP_POWER_CTRL_SLEEP /* power manager unit control the procedure */ - gt1x_power_switch(SWITCH_ON); - gt1x_power_reset(); - GTP_INFO("Wakeup by poweron"); - return 0; -#else /* gesture wakeup & int port wakeup */ + if (!gt1x_power_switch(SWITCH_ON)) { + gt1x_power_reset(); + GTP_INFO("Wakeup by poweron"); + return 0; + } +#endif + + /* gesture wakeup & int port wakeup */ while (retry++ < 2) { #if GTP_GESTURE_WAKEUP if (gesture_enabled) { @@ -1003,7 +1004,6 @@ static s32 gt1x_wakeup_sleep(void) GTP_INFO("Wake up end."); return 0; } -#endif /* END GTP_POWER_CTRL_SLEEP */ } /** From 73bcd3814084ba03155912bed5d9b9c9a47dfb2c Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 24 Apr 2018 08:52:48 +0800 Subject: [PATCH 0031/1852] media: rockchip: isp: add pclk_isp_wrap for rk3399 Change-Id: I7e6e4bd0a7760cd4a4d35fcb7758a2194c491afc Signed-off-by: Hu Kejun --- drivers/media/platform/rockchip/isp1/dev.c | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c index b91253ef82936..0fa9723be0be3 100644 --- a/drivers/media/platform/rockchip/isp1/dev.c +++ b/drivers/media/platform/rockchip/isp1/dev.c @@ -342,7 +342,7 @@ static int rkisp1_fwnode_parse(struct device *dev, * not be get in here */ if (vep->bus_type != V4L2_MBUS_BT656 && - vep->bus_type != V4L2_MBUS_PARALLEL) + vep->bus_type != V4L2_MBUS_PARALLEL) return 0; rk_asd->mbus.flags = bus->flags; @@ -444,6 +444,7 @@ static const char * const rk3399_isp_clks[] = { "hclk_isp", "aclk_isp_wrap", "hclk_isp_wrap", + "pclk_isp_wrap" }; static const struct isp_match_data rk3288_isp_match_data = { @@ -508,7 +509,8 @@ static void rkisp1_disable_sys_clk(struct rkisp1_device *rkisp1_dev) int i; for (i = rkisp1_dev->clk_size - 1; i >= 0; i--) - clk_disable_unprepare(rkisp1_dev->clks[i]); + if (!IS_ERR(rkisp1_dev->clks[i])) + clk_disable_unprepare(rkisp1_dev->clks[i]); } static int rkisp1_enable_sys_clk(struct rkisp1_device *rkisp1_dev) @@ -516,14 +518,17 @@ static int rkisp1_enable_sys_clk(struct rkisp1_device *rkisp1_dev) int i, ret = -EINVAL; for (i = 0; i < rkisp1_dev->clk_size; i++) { - ret = clk_prepare_enable(rkisp1_dev->clks[i]); - if (ret < 0) - goto err; + if (!IS_ERR(rkisp1_dev->clks[i])) { + ret = clk_prepare_enable(rkisp1_dev->clks[i]); + if (ret < 0) + goto err; + } } return 0; err: for (--i; i >= 0; --i) - clk_disable_unprepare(rkisp1_dev->clks[i]); + if (!IS_ERR(rkisp1_dev->clks[i])) + clk_disable_unprepare(rkisp1_dev->clks[i]); return ret; } @@ -557,7 +562,7 @@ static int rkisp1_iommu_init(struct rkisp1_device *rkisp1_dev) if (ret) goto err; if (!common_iommu_setup_dma_ops(rkisp1_dev->dev, 0x10000000, - SZ_2G, rkisp1_dev->domain->ops)) { + SZ_2G, rkisp1_dev->domain->ops)) { iommu_detach_device(rkisp1_dev->domain, rkisp1_dev->dev); ret = -ENODEV; goto err; @@ -618,10 +623,8 @@ static int rkisp1_plat_probe(struct platform_device *pdev) for (i = 0; i < match_data->size; i++) { struct clk *clk = devm_clk_get(dev, match_data->clks[i]); - if (IS_ERR(clk)) { - dev_err(dev, "failed to get %s\n", match_data->clks[i]); - return PTR_ERR(clk); - } + if (IS_ERR(clk)) + dev_dbg(dev, "failed to get %s\n", match_data->clks[i]); isp_dev->clks[i] = clk; } isp_dev->clk_size = match_data->size; From 9ec14b3ca22d6c7bea425fa9bdb43543ab64c453 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Thu, 28 Jun 2018 16:51:43 +0800 Subject: [PATCH 0032/1852] fiq_debugger: Add proc_fops like other tty drivers The userspace might check tty information in proc fs. Change-Id: If3e81aacbc7948dd3000606702296bc2b76bec09 Signed-off-by: Jeffy Chen --- .../android/fiq_debugger/fiq_debugger.c | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/staging/android/fiq_debugger/fiq_debugger.c b/drivers/staging/android/fiq_debugger/fiq_debugger.c index 98bfb26bbcea3..997e4c2f8a60f 100644 --- a/drivers/staging/android/fiq_debugger/fiq_debugger.c +++ b/drivers/staging/android/fiq_debugger/fiq_debugger.c @@ -35,6 +35,7 @@ #include #include #include +#include #ifdef CONFIG_FIQ_DEBUGGER_TRUST_ZONE #include @@ -1205,6 +1206,39 @@ static void fiq_tty_poll_put_char(struct tty_driver *driver, int line, char ch) } #endif +#ifdef CONFIG_PROC_FS +static int fiq_tty_proc_show(struct seq_file *m, void *v) +{ + struct tty_driver *driver = m->private; + struct fiq_debugger_state **states = driver->driver_state; + struct fiq_debugger_state *state; + int i; + + seq_puts(m, "fiq-debugger driver\n"); + for (i = 0; i < MAX_FIQ_DEBUGGER_PORTS; i++) { + state = states[i]; + + seq_printf(m, "%d:", i); + seq_printf(m, " state:%d", state->console_enable); + seq_putc(m, '\n'); + } + return 0; +} + +static int fiq_tty_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, fiq_tty_proc_show, PDE_DATA(inode)); +} + +static const struct file_operations fiq_tty_proc_fops = { + .owner = THIS_MODULE, + .open = fiq_tty_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; +#endif + static const struct tty_port_operations fiq_tty_port_ops; static const struct tty_operations fiq_tty_driver_ops = { @@ -1217,6 +1251,9 @@ static const struct tty_operations fiq_tty_driver_ops = { .poll_get_char = fiq_tty_poll_get_char, .poll_put_char = fiq_tty_poll_put_char, #endif +#ifdef CONFIG_PROC_FS + .proc_fops = &fiq_tty_proc_fops, +#endif }; static int fiq_debugger_tty_init(void) From 5d2173f20a23cbbb0d8224e6c8bad5fff1ef1871 Mon Sep 17 00:00:00 2001 From: Andy Yan Date: Mon, 2 Jul 2018 09:53:55 +0800 Subject: [PATCH 0033/1852] arm64: dts: rockchip: default disable cpu opp-1200000000 for rk3308 According to P45 of <>, the max voltage for Logic is 1.1V, so for many boards which Core_VDD and Logic_VDD share the same power supply, the ARM core voltage will be limited to 1.1V, that can only guarantee the cpu to run at the max freq of 1008MHZ. As for board which Core_VDD and Logic_VDD use independent power supply, the cpu can run a higher freq up to 1296MHZ with higher Core_VDD power supply, you can eanble it in your board dts. Change-Id: I69777aa5bee797e609d9ea122f3502347930b631 Signed-off-by: Andy Yan --- arch/arm64/boot/dts/rockchip/rk3308.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3308.dtsi b/arch/arm64/boot/dts/rockchip/rk3308.dtsi index b8bee600686b1..276247d21db92 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3308.dtsi @@ -126,6 +126,7 @@ opp-hz = /bits/ 64 <1200000000>; opp-microvolt = <1200000 1200000 1340000>; clock-latency-ns = <40000>; + status = "disabled"; }; opp-1296000000 { opp-hz = /bits/ 64 <1296000000>; From 99def551d2b480f32823b0d2db03131a92e3dacf Mon Sep 17 00:00:00 2001 From: William Wu Date: Mon, 2 Jul 2018 17:34:17 +0800 Subject: [PATCH 0034/1852] tools: ffs-aio-example: add superspeed descriptors This patch adds superspeed descriptors in device applications to support USB 3.0 ffs gadget. Change-Id: I5a364c935b1d30e2e929791ff16a34cf0d1c87e1 Signed-off-by: William Wu --- .../multibuff/device_app/aio_multibuff.c | 68 ++++++++++++++++++- .../simple/device_app/aio_simple.c | 68 ++++++++++++++++++- 2 files changed, 134 insertions(+), 2 deletions(-) diff --git a/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c b/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c index aaca1f44e7886..8643beaf25a12 100644 --- a/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c +++ b/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c @@ -57,16 +57,30 @@ static const struct { struct usb_functionfs_descs_head_v2 header; __le32 fs_count; __le32 hs_count; + __le32 ss_count; + __le32 os_count; struct { struct usb_interface_descriptor intf; struct usb_endpoint_descriptor_no_audio bulk_sink; struct usb_endpoint_descriptor_no_audio bulk_source; } __attribute__ ((__packed__)) fs_descs, hs_descs; + struct { + struct usb_interface_descriptor intf; + struct usb_endpoint_descriptor_no_audio sink; + struct usb_ss_ep_comp_descriptor sink_comp; + struct usb_endpoint_descriptor_no_audio source; + struct usb_ss_ep_comp_descriptor source_comp; + } __attribute__ ((__packed__)) ss_descs; + struct usb_os_desc_header os_header; + struct usb_ext_compat_desc os_desc; + } __attribute__ ((__packed__)) descriptors = { .header = { .magic = htole32(FUNCTIONFS_DESCRIPTORS_MAGIC_V2), .flags = htole32(FUNCTIONFS_HAS_FS_DESC | - FUNCTIONFS_HAS_HS_DESC), + FUNCTIONFS_HAS_HS_DESC | + FUNCTIONFS_HAS_SS_DESC | + FUNCTIONFS_HAS_MS_OS_DESC), .length = htole32(sizeof(descriptors)), }, .fs_count = htole32(3), @@ -115,6 +129,58 @@ static const struct { .wMaxPacketSize = htole16(512), }, }, + .ss_count = htole32(5), + .ss_descs = { + .intf = { + .bLength = sizeof(descriptors.ss_descs.intf), + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = 0, + .bNumEndpoints = 2, + .bInterfaceClass = USB_CLASS_VENDOR_SPEC, + .iInterface = 1, + }, + .sink = { + .bLength = sizeof(descriptors.ss_descs.sink), + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = 1 | USB_DIR_IN, + .bmAttributes = USB_ENDPOINT_XFER_BULK, + .wMaxPacketSize = htole16(1024), + }, + .sink_comp = { + .bLength = sizeof(descriptors.ss_descs.sink_comp), + .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, + .bMaxBurst = 4, + }, + .source = { + .bLength = sizeof(descriptors.ss_descs.source), + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = 2 | USB_DIR_OUT, + .bmAttributes = USB_ENDPOINT_XFER_BULK, + .wMaxPacketSize = htole16(1024), + }, + .source_comp = { + .bLength = sizeof(descriptors.ss_descs.source_comp), + .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, + .bMaxBurst = 4, + }, + }, + .os_count = htole32(1), + .os_header = { + .interface = htole32(1), + .dwLength = htole32(sizeof(descriptors.os_header) + + sizeof(descriptors.os_desc)), + .bcdVersion = htole32(1), + .wIndex = htole32(4), + .bCount = htole32(1), + .Reserved = htole32(0), + }, + .os_desc = { + .bFirstInterfaceNumber = 0, + .Reserved1 = htole32(1), + .CompatibleID = {0}, + .SubCompatibleID = {0}, + .Reserved2 = {0}, + }, }; #define STR_INTERFACE "AIO Test" diff --git a/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c b/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c index 1f44a29818bf0..51574379ff913 100644 --- a/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c +++ b/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c @@ -55,16 +55,30 @@ static const struct { struct usb_functionfs_descs_head_v2 header; __le32 fs_count; __le32 hs_count; + __le32 ss_count; + __le32 os_count; struct { struct usb_interface_descriptor intf; struct usb_endpoint_descriptor_no_audio bulk_sink; struct usb_endpoint_descriptor_no_audio bulk_source; } __attribute__ ((__packed__)) fs_descs, hs_descs; + struct { + struct usb_interface_descriptor intf; + struct usb_endpoint_descriptor_no_audio sink; + struct usb_ss_ep_comp_descriptor sink_comp; + struct usb_endpoint_descriptor_no_audio source; + struct usb_ss_ep_comp_descriptor source_comp; + } __attribute__ ((__packed__)) ss_descs; + struct usb_os_desc_header os_header; + struct usb_ext_compat_desc os_desc; + } __attribute__ ((__packed__)) descriptors = { .header = { .magic = htole32(FUNCTIONFS_DESCRIPTORS_MAGIC_V2), .flags = htole32(FUNCTIONFS_HAS_FS_DESC | - FUNCTIONFS_HAS_HS_DESC), + FUNCTIONFS_HAS_HS_DESC | + FUNCTIONFS_HAS_SS_DESC | + FUNCTIONFS_HAS_MS_OS_DESC), .length = htole32(sizeof(descriptors)), }, .fs_count = htole32(3), @@ -113,6 +127,58 @@ static const struct { .wMaxPacketSize = htole16(512), }, }, + .ss_count = htole32(5), + .ss_descs = { + .intf = { + .bLength = sizeof(descriptors.ss_descs.intf), + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = 0, + .bNumEndpoints = 2, + .bInterfaceClass = USB_CLASS_VENDOR_SPEC, + .iInterface = 1, + }, + .sink = { + .bLength = sizeof(descriptors.ss_descs.sink), + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = 1 | USB_DIR_IN, + .bmAttributes = USB_ENDPOINT_XFER_BULK, + .wMaxPacketSize = htole16(1024), + }, + .sink_comp = { + .bLength = sizeof(descriptors.ss_descs.sink_comp), + .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, + .bMaxBurst = 4, + }, + .source = { + .bLength = sizeof(descriptors.ss_descs.source), + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = 2 | USB_DIR_OUT, + .bmAttributes = USB_ENDPOINT_XFER_BULK, + .wMaxPacketSize = htole16(1024), + }, + .source_comp = { + .bLength = sizeof(descriptors.ss_descs.source_comp), + .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, + .bMaxBurst = 4, + }, + }, + .os_count = htole32(1), + .os_header = { + .interface = htole32(1), + .dwLength = htole32(sizeof(descriptors.os_header) + + sizeof(descriptors.os_desc)), + .bcdVersion = htole32(1), + .wIndex = htole32(4), + .bCount = htole32(1), + .Reserved = htole32(0), + }, + .os_desc = { + .bFirstInterfaceNumber = 0, + .Reserved1 = htole32(1), + .CompatibleID = {0}, + .SubCompatibleID = {0}, + .Reserved2 = {0}, + }, }; #define STR_INTERFACE "AIO Test" From 19201ffc5fc3302d2719728461a48eb7e18f89b6 Mon Sep 17 00:00:00 2001 From: Li Huang Date: Tue, 3 Jul 2018 20:17:46 +0800 Subject: [PATCH 0035/1852] video/rockchip: rga2: Fixup some situation will cause rga flush timeout on rk3368. Change-Id: I40efd7ab0500bcf0b628060b4491acc56ce609b0 Signed-off-by: Li Huang --- drivers/video/rockchip/rga2/rga2_drv.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/video/rockchip/rga2/rga2_drv.c b/drivers/video/rockchip/rga2/rga2_drv.c index 22bbd3852aa40..cb3ec1950cf07 100644 --- a/drivers/video/rockchip/rga2/rga2_drv.c +++ b/drivers/video/rockchip/rga2/rga2_drv.c @@ -1058,14 +1058,11 @@ static long rga_ioctl(struct file *file, uint32_t cmd, unsigned long arg) printk("dst : aw=%d ah=%d vw=%d vh=%d \n", req_first.dst.act_w, req_first.dst.act_h, req_first.dst.vir_w, req_first.dst.vir_h); } else { - if ((req_first.src.act_w != req_first.dst.act_w) - || (req_first.src.act_h != req_first.dst.act_h)) { req_first.src.act_w = MIN(320, MIN(req_first.src.act_w, req_first.dst.act_w)); req_first.src.act_h = MIN(240, MIN(req_first.src.act_h, req_first.dst.act_h)); req_first.dst.act_w = req_first.src.act_w; req_first.dst.act_h = req_first.src.act_h; ret = rga2_blit_sync(session, &req_first); - } } } ret = rga2_blit_async(session, &req); From d7a7232ea484aabfe11621d4326298ea8d9c55a2 Mon Sep 17 00:00:00 2001 From: Lin Jianhua Date: Fri, 29 Jun 2018 19:12:20 +0800 Subject: [PATCH 0036/1852] arm64: dts: rockchip: add voice module dts for rk3308 Change-Id: I12135f6add05b926ad466d2edfef4189e47d5a32 Signed-off-by: Lin Jianhua --- arch/arm64/boot/dts/rockchip/Makefile | 1 + .../rk3308-voice-module-board-v10.dts | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 arch/arm64/boot/dts/rockchip/rk3308-voice-module-board-v10.dts diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile index ce0a5a0d137c7..6a9298751c288 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile @@ -9,6 +9,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-evb-dmic-i2s-v11.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-evb-dmic-pdm-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-evb-dmic-pdm-v11.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-fpga.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-voice-module-board-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3326-evb-ai-va-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3326-evb-ai-va-v11.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3326-evb-lp3-v10.dtb diff --git a/arch/arm64/boot/dts/rockchip/rk3308-voice-module-board-v10.dts b/arch/arm64/boot/dts/rockchip/rk3308-voice-module-board-v10.dts new file mode 100644 index 0000000000000..9f94c3579ff76 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-voice-module-board-v10.dts @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd + */ + +/dts-v1/; + +#include "arm/rk3308-voice-module-board-v10-aarch32.dts" + +/ { + model = "Rockchip RK3308 Voice Module Board V10"; + compatible = "rockchip,rk3308-voice-module-board-v10", "rockchip,rk3308"; +}; + +&ramoops_mem { + reg = <0x0 0x110000 0x0 0xf0000>; +}; + +&ramoops { + record-size = <0x0 0x30000>; + console-size = <0x0 0xc0000>; +}; From 54eb6f29aa447d08082e22aac4ff64087564eda3 Mon Sep 17 00:00:00 2001 From: Alex Zhao Date: Wed, 4 Jul 2018 17:26:33 +0800 Subject: [PATCH 0037/1852] net: wireless: rockchip_wlan: rtl8723bs: enable CONFIG_RESUME_IN_WORKQUEUE Wifi does not take up system wake-up time Change-Id: Ib226479f6146431d4ce2292f60a03e177d5874d1 Signed-off-by: Alex Zhao --- drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile b/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile index 46880dd7954aa..0ff707fd37eb7 100644 --- a/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile +++ b/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile @@ -1349,6 +1349,7 @@ EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE # default setting for Power control EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC EXTRA_CFLAGS += -DRTW_SUPPORT_PLATFORM_SHUTDOWN +EXTRA_CFLAGS += -DCONFIG_RESUME_IN_WORKQUEUE # default setting for Special function ARCH := arm CROSS_COMPILE := /home/android_sdk/Rockchip/Rk3188/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- From 865cdd62ebf21708e05dbd660f7b22ee3dfa406c Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 24 Apr 2018 09:49:21 +0800 Subject: [PATCH 0038/1852] media: i2c: add ov4689 driver for rkisp1 Change-Id: Ie47a347dcdfaeec112140a14d9cd005ff048f64e Signed-off-by: Hu Kejun --- drivers/media/i2c/Kconfig | 12 + drivers/media/i2c/Makefile | 1 + drivers/media/i2c/ov4689.c | 1162 +++++++++++++++++++++++++ drivers/media/i2c/soc_camera/Makefile | 2 +- 4 files changed, 1176 insertions(+), 1 deletion(-) create mode 100644 drivers/media/i2c/ov4689.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 6f9568cd1705d..fb3d143fbfd3c 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -525,6 +525,18 @@ config VIDEO_OV2685 To compile this driver as a module, choose M here: the module will be called ov2685. +config VIDEO_OV4689 + tristate "OmniVision OV4689 sensor support" + depends on VIDEO_V4L2 && I2C && MEDIA_CONTROLLER + depends on MEDIA_CAMERA_SUPPORT + select V4L2_FWNODE + ---help--- + This is a Video4Linux2 sensor-level driver for the OmniVision + OV4689 camera. + + To compile this driver as a module, choose M here: the + module will be called ov4689. + config VIDEO_OV5647 tristate "OmniVision OV5647 sensor support" depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index 720e5b35443a1..707b505648f32 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -57,6 +57,7 @@ obj-$(CONFIG_VIDEO_UPD64031A) += upd64031a.o obj-$(CONFIG_VIDEO_UPD64083) += upd64083.o obj-$(CONFIG_VIDEO_OV2685) += ov2685.o +obj-$(CONFIG_VIDEO_OV4689) += ov4689.o obj-$(CONFIG_VIDEO_OV5695) += ov5695.o obj-$(CONFIG_VIDEO_OV7640) += ov7640.o obj-$(CONFIG_VIDEO_OV7670) += ov7670.o diff --git a/drivers/media/i2c/ov4689.c b/drivers/media/i2c/ov4689.c new file mode 100644 index 0000000000000..819b856e98722 --- /dev/null +++ b/drivers/media/i2c/ov4689.c @@ -0,0 +1,1162 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * ov4689 driver + * + * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef V4L2_CID_DIGITAL_GAIN +#define V4L2_CID_DIGITAL_GAIN V4L2_CID_GAIN +#endif + +/* 45Mhz * 4 Binning */ +#define OV4689_PIXEL_RATE (45 * 1000 * 1000 * 4) +#define OV4689_XVCLK_FREQ 24000000 + +#define CHIP_ID 0x004688 +#define OV4689_REG_CHIP_ID 0x300a + +#define OV4689_REG_CTRL_MODE 0x0100 +#define OV4689_MODE_SW_STANDBY 0x0 +#define OV4689_MODE_STREAMING BIT(0) + +#define OV4689_REG_EXPOSURE 0x3500 +#define OV4689_EXPOSURE_MIN 4 +#define OV4689_EXPOSURE_STEP 1 +#define OV4689_VTS_MAX 0x7fff + +#define OV4689_REG_GAIN_H 0x3508 +#define OV4689_REG_GAIN_L 0x3509 +#define OV4689_GAIN_H_MASK 0x07 +#define OV4689_GAIN_H_SHIFT 8 +#define OV4689_GAIN_L_MASK 0xff +#define OV4689_GAIN_MIN 0x10 +#define OV4689_GAIN_MAX 0xf8 +#define OV4689_GAIN_STEP 1 +#define OV4689_GAIN_DEFAULT 0x10 + +#define OV4689_REG_TEST_PATTERN 0x5040 +#define OV4689_TEST_PATTERN_ENABLE 0x80 +#define OV4689_TEST_PATTERN_DISABLE 0x0 + +#define OV4689_REG_VTS 0x380e + +#define REG_NULL 0xFFFF + +#define OV4689_REG_VALUE_08BIT 1 +#define OV4689_REG_VALUE_16BIT 2 +#define OV4689_REG_VALUE_24BIT 3 + +#define OV4689_LANES 2 +#define OV4689_BITS_PER_SAMPLE 10 + +#define OF_CAMERA_PINCTRL_STATE_DEFAULT "rockchip,camera_default" +#define OF_CAMERA_PINCTRL_STATE_SLEEP "rockchip,camera_sleep" + +static const char * const ov4689_supply_names[] = { + "avdd", /* Analog power */ + "dovdd", /* Digital I/O power */ + "dvdd", /* Digital core power */ +}; + +#define OV4689_NUM_SUPPLIES ARRAY_SIZE(ov4689_supply_names) + +struct regval { + u16 addr; + u8 val; +}; + +struct ov4689_mode { + u32 width; + u32 height; + u32 max_fps; + u32 hts_def; + u32 vts_def; + u32 exp_def; + const struct regval *reg_list; +}; + +struct ov4689 { + struct i2c_client *client; + struct clk *xvclk; + struct gpio_desc *reset_gpio; + struct gpio_desc *pwdn_gpio; + struct regulator_bulk_data supplies[OV4689_NUM_SUPPLIES]; + + struct pinctrl *pinctrl; + struct pinctrl_state *pins_default; + struct pinctrl_state *pins_sleep; + + struct v4l2_subdev subdev; + struct media_pad pad; + struct v4l2_ctrl_handler ctrl_handler; + struct v4l2_ctrl *exposure; + struct v4l2_ctrl *anal_gain; + struct v4l2_ctrl *digi_gain; + struct v4l2_ctrl *hblank; + struct v4l2_ctrl *vblank; + struct v4l2_ctrl *test_pattern; + struct mutex mutex; + bool streaming; + const struct ov4689_mode *cur_mode; +}; + +#define to_ov4689(sd) container_of(sd, struct ov4689, subdev) + +/* + * Xclk 24Mhz + */ +static const struct regval ov4689_global_regs[] = { + {REG_NULL, 0x00}, +}; + +/* + * Xclk 24Mhz + * max_framerate 30fps + * mipi_datarate per lane 1008Mbps + */ +static const struct regval ov4689_2688x1520_regs[] = { + {0x0103, 0x01}, + {0x3638, 0x00}, + {0x0300, 0x00}, + {0x0302, 0x2a}, + {0x0303, 0x00}, + {0x0304, 0x03}, + {0x030b, 0x00}, + {0x030d, 0x1e}, + {0x030e, 0x04}, + {0x030f, 0x01}, + {0x0312, 0x01}, + {0x031e, 0x00}, + {0x3000, 0x20}, + {0x3002, 0x00}, + {0x3018, 0x32}, + {0x3020, 0x93}, + {0x3021, 0x03}, + {0x3022, 0x01}, + {0x3031, 0x0a}, + {0x303f, 0x0c}, + {0x3305, 0xf1}, + {0x3307, 0x04}, + {0x3309, 0x29}, + {0x3500, 0x00}, + {0x3501, 0x60}, + {0x3502, 0x00}, + {0x3503, 0x04}, + {0x3504, 0x00}, + {0x3505, 0x00}, + {0x3506, 0x00}, + {0x3507, 0x00}, + {0x3508, 0x00}, + {0x3509, 0x80}, + {0x350a, 0x00}, + {0x350b, 0x00}, + {0x350c, 0x00}, + {0x350d, 0x00}, + {0x350e, 0x00}, + {0x350f, 0x80}, + {0x3510, 0x00}, + {0x3511, 0x00}, + {0x3512, 0x00}, + {0x3513, 0x00}, + {0x3514, 0x00}, + {0x3515, 0x80}, + {0x3516, 0x00}, + {0x3517, 0x00}, + {0x3518, 0x00}, + {0x3519, 0x00}, + {0x351a, 0x00}, + {0x351b, 0x80}, + {0x351c, 0x00}, + {0x351d, 0x00}, + {0x351e, 0x00}, + {0x351f, 0x00}, + {0x3520, 0x00}, + {0x3521, 0x80}, + {0x3522, 0x08}, + {0x3524, 0x08}, + {0x3526, 0x08}, + {0x3528, 0x08}, + {0x352a, 0x08}, + {0x3602, 0x00}, + {0x3603, 0x40}, + {0x3604, 0x02}, + {0x3605, 0x00}, + {0x3606, 0x00}, + {0x3607, 0x00}, + {0x3609, 0x12}, + {0x360a, 0x40}, + {0x360c, 0x08}, + {0x360f, 0xe5}, + {0x3608, 0x8f}, + {0x3611, 0x00}, + {0x3613, 0xf7}, + {0x3616, 0x58}, + {0x3619, 0x99}, + {0x361b, 0x60}, + {0x361c, 0x7a}, + {0x361e, 0x79}, + {0x361f, 0x02}, + {0x3632, 0x00}, + {0x3633, 0x10}, + {0x3634, 0x10}, + {0x3635, 0x10}, + {0x3636, 0x15}, + {0x3646, 0x86}, + {0x364a, 0x0b}, + {0x3700, 0x17}, + {0x3701, 0x22}, + {0x3703, 0x10}, + {0x370a, 0x37}, + {0x3705, 0x00}, + {0x3706, 0x63}, + {0x3709, 0x3c}, + {0x370b, 0x01}, + {0x370c, 0x30}, + {0x3710, 0x24}, + {0x3711, 0x0c}, + {0x3716, 0x00}, + {0x3720, 0x28}, + {0x3729, 0x7b}, + {0x372a, 0x84}, + {0x372b, 0xbd}, + {0x372c, 0xbc}, + {0x372e, 0x52}, + {0x373c, 0x0e}, + {0x373e, 0x33}, + {0x3743, 0x10}, + {0x3744, 0x88}, + {0x3745, 0xc0}, + {0x374a, 0x43}, + {0x374c, 0x00}, + {0x374e, 0x23}, + {0x3751, 0x7b}, + {0x3752, 0x84}, + {0x3753, 0xbd}, + {0x3754, 0xbc}, + {0x3756, 0x52}, + {0x375c, 0x00}, + {0x3760, 0x00}, + {0x3761, 0x00}, + {0x3762, 0x00}, + {0x3763, 0x00}, + {0x3764, 0x00}, + {0x3767, 0x04}, + {0x3768, 0x04}, + {0x3769, 0x08}, + {0x376a, 0x08}, + {0x376b, 0x20}, + {0x376c, 0x00}, + {0x376d, 0x00}, + {0x376e, 0x00}, + {0x3773, 0x00}, + {0x3774, 0x51}, + {0x3776, 0xbd}, + {0x3777, 0xbd}, + {0x3781, 0x18}, + {0x3783, 0x25}, + {0x3798, 0x1b}, + {0x3800, 0x00}, + {0x3801, 0x08}, + {0x3802, 0x00}, + {0x3803, 0x04}, + {0x3804, 0x0a}, + {0x3805, 0x97}, + {0x3806, 0x05}, + {0x3807, 0xfb}, + {0x3808, 0x0a}, + {0x3809, 0x80}, + {0x380a, 0x05}, + {0x380b, 0xf0}, + {0x380c, 0x0a}, + {0x380d, 0x18}, + {0x380e, 0x06}, + {0x380f, 0x12}, + {0x3810, 0x00}, + {0x3811, 0x08}, + {0x3812, 0x00}, + {0x3813, 0x04}, + {0x3814, 0x01}, + {0x3815, 0x01}, + {0x3819, 0x01}, + {0x3820, 0x00}, + {0x3821, 0x06}, + {0x3829, 0x00}, + {0x382a, 0x01}, + {0x382b, 0x01}, + {0x382d, 0x7f}, + {0x3830, 0x04}, + {0x3836, 0x01}, + {0x3837, 0x00}, + {0x3841, 0x02}, + {0x3846, 0x08}, + {0x3847, 0x07}, + {0x3d85, 0x36}, + {0x3d8c, 0x71}, + {0x3d8d, 0xcb}, + {0x3f0a, 0x00}, + {0x4000, 0xf1}, + {0x4001, 0x40}, + {0x4002, 0x04}, + {0x4003, 0x14}, + {0x400e, 0x00}, + {0x4011, 0x00}, + {0x401a, 0x00}, + {0x401b, 0x00}, + {0x401c, 0x00}, + {0x401d, 0x00}, + {0x401f, 0x00}, + {0x4020, 0x00}, + {0x4021, 0x10}, + {0x4022, 0x07}, + {0x4023, 0xcf}, + {0x4024, 0x09}, + {0x4025, 0x60}, + {0x4026, 0x09}, + {0x4027, 0x6f}, + {0x4028, 0x00}, + {0x4029, 0x02}, + {0x402a, 0x06}, + {0x402b, 0x04}, + {0x402c, 0x02}, + {0x402d, 0x02}, + {0x402e, 0x0e}, + {0x402f, 0x04}, + {0x4302, 0xff}, + {0x4303, 0xff}, + {0x4304, 0x00}, + {0x4305, 0x00}, + {0x4306, 0x00}, + {0x4308, 0x02}, + {0x4500, 0x6c}, + {0x4501, 0xc4}, + {0x4502, 0x40}, + {0x4503, 0x01}, + {0x4601, 0xa7}, + {0x4800, 0x04}, + {0x4813, 0x08}, + {0x481f, 0x40}, + {0x4829, 0x78}, + {0x4837, 0x10}, + {0x4b00, 0x2a}, + {0x4b0d, 0x00}, + {0x4d00, 0x04}, + {0x4d01, 0x42}, + {0x4d02, 0xd1}, + {0x4d03, 0x93}, + {0x4d04, 0xf5}, + {0x4d05, 0xc1}, + {0x5000, 0xf3}, + {0x5001, 0x11}, + {0x5004, 0x00}, + {0x500a, 0x00}, + {0x500b, 0x00}, + {0x5032, 0x00}, + {0x5040, 0x00}, + {0x5050, 0x0c}, + {0x5500, 0x00}, + {0x5501, 0x10}, + {0x5502, 0x01}, + {0x5503, 0x0f}, + {0x8000, 0x00}, + {0x8001, 0x00}, + {0x8002, 0x00}, + {0x8003, 0x00}, + {0x8004, 0x00}, + {0x8005, 0x00}, + {0x8006, 0x00}, + {0x8007, 0x00}, + {0x8008, 0x00}, + {0x3638, 0x00}, + {REG_NULL, 0x00}, +}; + +static const struct ov4689_mode supported_modes[] = { + { + .width = 2688, + .height = 1520, + .max_fps = 30, + .exp_def = 0x0600, + .hts_def = 0x0a18, + .vts_def = 0x0612, + .reg_list = ov4689_2688x1520_regs, + }, +}; + +#define OV4689_LINK_FREQ_500MHZ 500000000 +static const s64 link_freq_menu_items[] = { + OV4689_LINK_FREQ_500MHZ +}; + +static const char * const ov4689_test_pattern_menu[] = { + "Disabled", + "Vertical Color Bar Type 1", + "Vertical Color Bar Type 2", + "Vertical Color Bar Type 3", + "Vertical Color Bar Type 4" +}; + +/* Write registers up to 4 at a time */ +static int ov4689_write_reg(struct i2c_client *client, u16 reg, + u32 len, u32 val) +{ + u32 buf_i, val_i; + u8 buf[6]; + u8 *val_p; + __be32 val_be; + + if (len > 4) + return -EINVAL; + + buf[0] = reg >> 8; + buf[1] = reg & 0xff; + + val_be = cpu_to_be32(val); + val_p = (u8 *)&val_be; + buf_i = 2; + val_i = 4 - len; + + while (val_i < 4) + buf[buf_i++] = val_p[val_i++]; + + if (i2c_master_send(client, buf, len + 2) != len + 2) + return -EIO; + + return 0; +} + +static int ov4689_write_array(struct i2c_client *client, + const struct regval *regs) +{ + u32 i; + int ret = 0; + + for (i = 0; ret == 0 && regs[i].addr != REG_NULL; i++) + ret = ov4689_write_reg(client, regs[i].addr, + OV4689_REG_VALUE_08BIT, regs[i].val); + + return ret; +} + +/* Read registers up to 4 at a time */ +static int ov4689_read_reg(struct i2c_client *client, u16 reg, unsigned int len, + u32 *val) +{ + struct i2c_msg msgs[2]; + u8 *data_be_p; + __be32 data_be = 0; + __be16 reg_addr_be = cpu_to_be16(reg); + int ret; + + if (len > 4 || !len) + return -EINVAL; + + data_be_p = (u8 *)&data_be; + /* Write register address */ + msgs[0].addr = client->addr; + msgs[0].flags = 0; + msgs[0].len = 2; + msgs[0].buf = (u8 *)®_addr_be; + + /* Read data from register */ + msgs[1].addr = client->addr; + msgs[1].flags = I2C_M_RD; + msgs[1].len = len; + msgs[1].buf = &data_be_p[4 - len]; + + ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); + if (ret != ARRAY_SIZE(msgs)) + return -EIO; + + *val = be32_to_cpu(data_be); + + return 0; +} + +static int ov4689_get_reso_dist(const struct ov4689_mode *mode, + struct v4l2_mbus_framefmt *framefmt) +{ + return abs(mode->width - framefmt->width) + + abs(mode->height - framefmt->height); +} + +static const struct ov4689_mode * +ov4689_find_best_fit(struct v4l2_subdev_format *fmt) +{ + struct v4l2_mbus_framefmt *framefmt = &fmt->format; + int dist; + int cur_best_fit = 0; + int cur_best_fit_dist = -1; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(supported_modes); i++) { + dist = ov4689_get_reso_dist(&supported_modes[i], framefmt); + if (cur_best_fit_dist == -1 || dist < cur_best_fit_dist) { + cur_best_fit_dist = dist; + cur_best_fit = i; + } + } + + return &supported_modes[cur_best_fit]; +} + +static int ov4689_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +{ + struct ov4689 *ov4689 = to_ov4689(sd); + const struct ov4689_mode *mode; + s64 h_blank, vblank_def; + + mutex_lock(&ov4689->mutex); + + mode = ov4689_find_best_fit(fmt); + fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10; + fmt->format.width = mode->width; + fmt->format.height = mode->height; + fmt->format.field = V4L2_FIELD_NONE; + if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; +#else + mutex_unlock(&ov4689->mutex); + return -ENOTTY; +#endif + } else { + ov4689->cur_mode = mode; + h_blank = mode->hts_def - mode->width; + __v4l2_ctrl_modify_range(ov4689->hblank, h_blank, + h_blank, 1, h_blank); + vblank_def = mode->vts_def - mode->height; + __v4l2_ctrl_modify_range(ov4689->vblank, vblank_def, + OV4689_VTS_MAX - mode->height, + 1, vblank_def); + } + + mutex_unlock(&ov4689->mutex); + + return 0; +} + +static int ov4689_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +{ + struct ov4689 *ov4689 = to_ov4689(sd); + const struct ov4689_mode *mode = ov4689->cur_mode; + + mutex_lock(&ov4689->mutex); + if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); +#else + mutex_unlock(&ov4689->mutex); + return -ENOTTY; +#endif + } else { + fmt->format.width = mode->width; + fmt->format.height = mode->height; + fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10; + fmt->format.field = V4L2_FIELD_NONE; + } + mutex_unlock(&ov4689->mutex); + + return 0; +} + +static int ov4689_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_mbus_code_enum *code) +{ + if (code->index != 0) + return -EINVAL; + code->code = MEDIA_BUS_FMT_SBGGR10_1X10; + + return 0; +} + +static int ov4689_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_frame_size_enum *fse) +{ + if (fse->index >= ARRAY_SIZE(supported_modes)) + return -EINVAL; + + if (fse->code != MEDIA_BUS_FMT_SBGGR10_1X10) + return -EINVAL; + + fse->min_width = supported_modes[fse->index].width; + fse->max_width = supported_modes[fse->index].width; + fse->max_height = supported_modes[fse->index].height; + fse->min_height = supported_modes[fse->index].height; + + return 0; +} + +static int ov4689_enable_test_pattern(struct ov4689 *ov4689, u32 pattern) +{ + u32 val; + + if (pattern) + val = (pattern - 1) | OV4689_TEST_PATTERN_ENABLE; + else + val = OV4689_TEST_PATTERN_DISABLE; + + return ov4689_write_reg(ov4689->client, OV4689_REG_TEST_PATTERN, + OV4689_REG_VALUE_08BIT, val); +} + +static int __ov4689_start_stream(struct ov4689 *ov4689) +{ + int ret; + + ret = ov4689_write_array(ov4689->client, ov4689_global_regs); + if (ret) + return ret; + + ret = ov4689_write_array(ov4689->client, ov4689->cur_mode->reg_list); + if (ret) + return ret; + + /* In case these controls are set before streaming */ + mutex_unlock(&ov4689->mutex); + ret = v4l2_ctrl_handler_setup(&ov4689->ctrl_handler); + mutex_lock(&ov4689->mutex); + if (ret) + return ret; + + return ov4689_write_reg(ov4689->client, OV4689_REG_CTRL_MODE, + OV4689_REG_VALUE_08BIT, OV4689_MODE_STREAMING); +} + +static int __ov4689_stop_stream(struct ov4689 *ov4689) +{ + return ov4689_write_reg(ov4689->client, OV4689_REG_CTRL_MODE, + OV4689_REG_VALUE_08BIT, OV4689_MODE_SW_STANDBY); +} + +static int ov4689_s_stream(struct v4l2_subdev *sd, int on) +{ + struct ov4689 *ov4689 = to_ov4689(sd); + struct i2c_client *client = ov4689->client; + int ret = 0; + + mutex_lock(&ov4689->mutex); + on = !!on; + if (on == ov4689->streaming) + goto unlock_and_return; + + if (on) { + ret = pm_runtime_get_sync(&client->dev); + if (ret < 0) { + pm_runtime_put_noidle(&client->dev); + goto unlock_and_return; + } + + ret = __ov4689_start_stream(ov4689); + if (ret) { + v4l2_err(sd, "start stream failed while write regs\n"); + pm_runtime_put(&client->dev); + goto unlock_and_return; + } + } else { + __ov4689_stop_stream(ov4689); + pm_runtime_put(&client->dev); + } + + ov4689->streaming = on; + +unlock_and_return: + mutex_unlock(&ov4689->mutex); + + return ret; +} + +/* Calculate the delay in us by clock rate and clock cycles */ +static inline u32 ov4689_cal_delay(u32 cycles) +{ + return DIV_ROUND_UP(cycles, OV4689_XVCLK_FREQ / 1000 / 1000); +} + +static int __ov4689_power_on(struct ov4689 *ov4689) +{ + int ret; + u32 delay_us; + struct device *dev = &ov4689->client->dev; + + if (!IS_ERR_OR_NULL(ov4689->pins_default)) { + ret = pinctrl_select_state(ov4689->pinctrl, + ov4689->pins_default); + if (ret < 0) + dev_err(dev, "could not set pins\n"); + } + + ret = clk_prepare_enable(ov4689->xvclk); + if (ret < 0) { + dev_err(dev, "Failed to enable xvclk\n"); + return ret; + } + + if (!IS_ERR(ov4689->reset_gpio)) + gpiod_set_value_cansleep(ov4689->reset_gpio, 0); + + ret = regulator_bulk_enable(OV4689_NUM_SUPPLIES, ov4689->supplies); + if (ret < 0) { + dev_err(dev, "Failed to enable regulators\n"); + goto disable_clk; + } + + if (!IS_ERR(ov4689->reset_gpio)) + gpiod_set_value_cansleep(ov4689->reset_gpio, 1); + + usleep_range(500, 1000); + if (!IS_ERR(ov4689->pwdn_gpio)) + gpiod_set_value_cansleep(ov4689->pwdn_gpio, 1); + + /* 8192 cycles prior to first SCCB transaction */ + delay_us = ov4689_cal_delay(8192); + usleep_range(delay_us, delay_us * 2); + + return 0; + +disable_clk: + clk_disable_unprepare(ov4689->xvclk); + + return ret; +} + +static void __ov4689_power_off(struct ov4689 *ov4689) +{ + int ret; + struct device *dev = &ov4689->client->dev; + + if (!IS_ERR(ov4689->pwdn_gpio)) + gpiod_set_value_cansleep(ov4689->pwdn_gpio, 0); + clk_disable_unprepare(ov4689->xvclk); + if (!IS_ERR(ov4689->reset_gpio)) + gpiod_set_value_cansleep(ov4689->reset_gpio, 0); + if (!IS_ERR_OR_NULL(ov4689->pins_sleep)) { + ret = pinctrl_select_state(ov4689->pinctrl, + ov4689->pins_sleep); + if (ret < 0) + dev_dbg(dev, "could not set pins\n"); + } + regulator_bulk_disable(OV4689_NUM_SUPPLIES, ov4689->supplies); +} + +static int ov4689_runtime_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct ov4689 *ov4689 = to_ov4689(sd); + + return __ov4689_power_on(ov4689); +} + +static int ov4689_runtime_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct ov4689 *ov4689 = to_ov4689(sd); + + __ov4689_power_off(ov4689); + + return 0; +} + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API +static int ov4689_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + struct ov4689 *ov4689 = to_ov4689(sd); + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->pad, 0); + const struct ov4689_mode *def_mode = &supported_modes[0]; + + mutex_lock(&ov4689->mutex); + /* Initialize try_fmt */ + try_fmt->width = def_mode->width; + try_fmt->height = def_mode->height; + try_fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10; + try_fmt->field = V4L2_FIELD_NONE; + + mutex_unlock(&ov4689->mutex); + /* No crop or compose */ + + return 0; +} +#endif + +static const struct dev_pm_ops ov4689_pm_ops = { + SET_RUNTIME_PM_OPS(ov4689_runtime_suspend, + ov4689_runtime_resume, NULL) +}; + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API +static const struct v4l2_subdev_internal_ops ov4689_internal_ops = { + .open = ov4689_open, +}; +#endif + +static const struct v4l2_subdev_video_ops ov4689_video_ops = { + .s_stream = ov4689_s_stream, +}; + +static const struct v4l2_subdev_pad_ops ov4689_pad_ops = { + .enum_mbus_code = ov4689_enum_mbus_code, + .enum_frame_size = ov4689_enum_frame_sizes, + .get_fmt = ov4689_get_fmt, + .set_fmt = ov4689_set_fmt, +}; + +static const struct v4l2_subdev_ops ov4689_subdev_ops = { + .video = &ov4689_video_ops, + .pad = &ov4689_pad_ops, +}; + +static int ov4689_set_ctrl(struct v4l2_ctrl *ctrl) +{ + struct ov4689 *ov4689 = container_of(ctrl->handler, + struct ov4689, ctrl_handler); + struct i2c_client *client = ov4689->client; + s64 max; + int ret = 0; + + /* Propagate change of current control to all related controls */ + switch (ctrl->id) { + case V4L2_CID_VBLANK: + /* Update max exposure while meeting expected vblanking */ + max = ov4689->cur_mode->height + ctrl->val - 4; + __v4l2_ctrl_modify_range(ov4689->exposure, + ov4689->exposure->minimum, max, + ov4689->exposure->step, + ov4689->exposure->default_value); + break; + } + + if (pm_runtime_get(&client->dev) <= 0) + return 0; + + switch (ctrl->id) { + case V4L2_CID_EXPOSURE: + /* 4 least significant bits of expsoure are fractional part */ + ret = ov4689_write_reg(ov4689->client, OV4689_REG_EXPOSURE, + OV4689_REG_VALUE_24BIT, ctrl->val << 4); + break; + case V4L2_CID_ANALOGUE_GAIN: + ret = ov4689_write_reg(ov4689->client, OV4689_REG_GAIN_H, + OV4689_REG_VALUE_08BIT, + (ctrl->val >> OV4689_GAIN_H_SHIFT) & OV4689_GAIN_H_MASK); + ret |= ov4689_write_reg(ov4689->client, OV4689_REG_GAIN_L, + OV4689_REG_VALUE_08BIT, + ctrl->val & OV4689_GAIN_L_MASK); + break; + case V4L2_CID_VBLANK: + ret = ov4689_write_reg(ov4689->client, OV4689_REG_VTS, + OV4689_REG_VALUE_16BIT, + ctrl->val + ov4689->cur_mode->height); + break; + case V4L2_CID_TEST_PATTERN: + ret = ov4689_enable_test_pattern(ov4689, ctrl->val); + break; + default: + dev_warn(&client->dev, "%s Unhandled id:0x%x, val:0x%x\n", + __func__, ctrl->id, ctrl->val); + break; + } + + pm_runtime_put(&client->dev); + + return ret; +} + +static const struct v4l2_ctrl_ops ov4689_ctrl_ops = { + .s_ctrl = ov4689_set_ctrl, +}; + +static int ov4689_initialize_controls(struct ov4689 *ov4689) +{ + const struct ov4689_mode *mode; + struct v4l2_ctrl_handler *handler; + struct v4l2_ctrl *ctrl; + s64 exposure_max, vblank_def; + u32 h_blank; + int ret; + + handler = &ov4689->ctrl_handler; + mode = ov4689->cur_mode; + ret = v4l2_ctrl_handler_init(handler, 8); + if (ret) + return ret; + handler->lock = &ov4689->mutex; + + ctrl = v4l2_ctrl_new_int_menu(handler, NULL, V4L2_CID_LINK_FREQ, + 0, 0, link_freq_menu_items); + if (ctrl) + ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; + + v4l2_ctrl_new_std(handler, NULL, V4L2_CID_PIXEL_RATE, + 0, OV4689_PIXEL_RATE, 1, OV4689_PIXEL_RATE); + + h_blank = mode->hts_def - mode->width; + ov4689->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, + h_blank, h_blank, 1, h_blank); + if (ov4689->hblank) + ov4689->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; + + vblank_def = mode->vts_def - mode->height; + ov4689->vblank = v4l2_ctrl_new_std(handler, &ov4689_ctrl_ops, + V4L2_CID_VBLANK, vblank_def, + OV4689_VTS_MAX - mode->height, + 1, vblank_def); + + exposure_max = mode->vts_def - 4; + ov4689->exposure = v4l2_ctrl_new_std(handler, &ov4689_ctrl_ops, + V4L2_CID_EXPOSURE, OV4689_EXPOSURE_MIN, + exposure_max, OV4689_EXPOSURE_STEP, + mode->exp_def); + + ov4689->anal_gain = v4l2_ctrl_new_std(handler, &ov4689_ctrl_ops, + V4L2_CID_ANALOGUE_GAIN, OV4689_GAIN_MIN, + OV4689_GAIN_MAX, OV4689_GAIN_STEP, + OV4689_GAIN_DEFAULT); + + ov4689->test_pattern = v4l2_ctrl_new_std_menu_items(handler, + &ov4689_ctrl_ops, V4L2_CID_TEST_PATTERN, + ARRAY_SIZE(ov4689_test_pattern_menu) - 1, + 0, 0, ov4689_test_pattern_menu); + + if (handler->error) { + ret = handler->error; + dev_err(&ov4689->client->dev, + "Failed to init controls(%d)\n", ret); + goto err_free_handler; + } + + ov4689->subdev.ctrl_handler = handler; + + return 0; + +err_free_handler: + v4l2_ctrl_handler_free(handler); + + return ret; +} + +static int ov4689_check_sensor_id(struct ov4689 *ov4689, + struct i2c_client *client) +{ + struct device *dev = &ov4689->client->dev; + u32 id = 0; + int ret; + + ret = ov4689_read_reg(client, OV4689_REG_CHIP_ID, + OV4689_REG_VALUE_16BIT, &id); + if (id != CHIP_ID) { + dev_err(dev, "Unexpected sensor id(%06x), ret(%d)\n", id, ret); + return ret; + } + + dev_info(dev, "Detected OV%06x sensor\n", CHIP_ID); + + return 0; +} + +static int ov4689_configure_regulators(struct ov4689 *ov4689) +{ + unsigned int i; + + for (i = 0; i < OV4689_NUM_SUPPLIES; i++) + ov4689->supplies[i].supply = ov4689_supply_names[i]; + + return devm_regulator_bulk_get(&ov4689->client->dev, + OV4689_NUM_SUPPLIES, + ov4689->supplies); +} + +static int ov4689_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct device *dev = &client->dev; + struct ov4689 *ov4689; + struct v4l2_subdev *sd; + int ret; + + ov4689 = devm_kzalloc(dev, sizeof(*ov4689), GFP_KERNEL); + if (!ov4689) + return -ENOMEM; + + ov4689->client = client; + ov4689->cur_mode = &supported_modes[0]; + + ov4689->xvclk = devm_clk_get(dev, "xvclk"); + if (IS_ERR(ov4689->xvclk)) { + dev_err(dev, "Failed to get xvclk\n"); + return -EINVAL; + } + ret = clk_set_rate(ov4689->xvclk, OV4689_XVCLK_FREQ); + if (ret < 0) { + dev_err(dev, "Failed to set xvclk rate (24MHz)\n"); + return ret; + } + if (clk_get_rate(ov4689->xvclk) != OV4689_XVCLK_FREQ) + dev_warn(dev, "xvclk mismatched, modes are based on 24MHz\n"); + + ov4689->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); + if (IS_ERR(ov4689->reset_gpio)) + dev_warn(dev, "Failed to get reset-gpios\n"); + + ov4689->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); + if (IS_ERR(ov4689->pwdn_gpio)) + dev_warn(dev, "Failed to get pwdn-gpios\n"); + + ov4689->pinctrl = devm_pinctrl_get(dev); + if (!IS_ERR(ov4689->pinctrl)) { + ov4689->pins_default = + pinctrl_lookup_state(ov4689->pinctrl, + OF_CAMERA_PINCTRL_STATE_DEFAULT); + if (IS_ERR(ov4689->pins_default)) + dev_err(dev, "could not get default pinstate\n"); + + ov4689->pins_sleep = + pinctrl_lookup_state(ov4689->pinctrl, + OF_CAMERA_PINCTRL_STATE_SLEEP); + if (IS_ERR(ov4689->pins_sleep)) + dev_err(dev, "could not get sleep pinstate\n"); + } else { + dev_err(dev, "no pinctrl\n"); + } + + ret = ov4689_configure_regulators(ov4689); + if (ret) { + dev_err(dev, "Failed to get power regulators\n"); + return ret; + } + + mutex_init(&ov4689->mutex); + + sd = &ov4689->subdev; + v4l2_i2c_subdev_init(sd, client, &ov4689_subdev_ops); + ret = ov4689_initialize_controls(ov4689); + if (ret) + goto err_destroy_mutex; + + ret = __ov4689_power_on(ov4689); + if (ret) + goto err_free_handler; + + ret = ov4689_check_sensor_id(ov4689, client); + if (ret) + goto err_power_off; + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + sd->internal_ops = &ov4689_internal_ops; + sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; +#endif +#if defined(CONFIG_MEDIA_CONTROLLER) + ov4689->pad.flags = MEDIA_PAD_FL_SOURCE; + sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR; + ret = media_entity_init(&sd->entity, 1, &ov4689->pad, 0); + if (ret < 0) + goto err_power_off; +#endif + + ret = v4l2_async_register_subdev(sd); + if (ret) { + dev_err(dev, "v4l2 async register subdev failed\n"); + goto err_clean_entity; + } + + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + pm_runtime_idle(dev); + + return 0; + +err_clean_entity: +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&sd->entity); +#endif +err_power_off: + __ov4689_power_off(ov4689); +err_free_handler: + v4l2_ctrl_handler_free(&ov4689->ctrl_handler); +err_destroy_mutex: + mutex_destroy(&ov4689->mutex); + + return ret; +} + +static int ov4689_remove(struct i2c_client *client) +{ + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct ov4689 *ov4689 = to_ov4689(sd); + + v4l2_async_unregister_subdev(sd); +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&sd->entity); +#endif + v4l2_ctrl_handler_free(&ov4689->ctrl_handler); + mutex_destroy(&ov4689->mutex); + + pm_runtime_disable(&client->dev); + if (!pm_runtime_status_suspended(&client->dev)) + __ov4689_power_off(ov4689); + pm_runtime_set_suspended(&client->dev); + + return 0; +} + +#if IS_ENABLED(CONFIG_OF) +static const struct of_device_id ov4689_of_match[] = { + { .compatible = "ovti,ov4689" }, + {}, +}; +MODULE_DEVICE_TABLE(of, ov4689_of_match); +#endif + +static const struct i2c_device_id ov4689_match_id[] = { + { "ovti,ov4689", 0 }, + { }, +}; + +static struct i2c_driver ov4689_i2c_driver = { + .driver = { + .name = "ov4689", + .pm = &ov4689_pm_ops, + .of_match_table = of_match_ptr(ov4689_of_match), + }, + .probe = &ov4689_probe, + .remove = &ov4689_remove, + .id_table = ov4689_match_id, +}; + +static int __init sensor_mod_init(void) +{ + return i2c_add_driver(&ov4689_i2c_driver); +} + +static void __exit sensor_mod_exit(void) +{ + i2c_del_driver(&ov4689_i2c_driver); +} + +device_initcall_sync(sensor_mod_init); +module_exit(sensor_mod_exit); + +MODULE_DESCRIPTION("OmniVision ov4689 sensor driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/media/i2c/soc_camera/Makefile b/drivers/media/i2c/soc_camera/Makefile index b1394116d2aa0..feffe83843f7a 100644 --- a/drivers/media/i2c/soc_camera/Makefile +++ b/drivers/media/i2c/soc_camera/Makefile @@ -12,4 +12,4 @@ obj-$(CONFIG_SOC_CAMERA_OV9640) += ov9640.o obj-$(CONFIG_SOC_CAMERA_OV9740) += ov9740.o obj-$(CONFIG_SOC_CAMERA_RJ54N1) += rj54n1cb0c.o obj-$(CONFIG_SOC_CAMERA_TW9910) += tw9910.o -obj-y += rockchip/ +obj-$(CONFIG_VIDEO_RK_CIF_ISP10) += rockchip/ \ No newline at end of file From c6e2f4c81c3a620d003a4d0c026d0a3c9b9bf59d Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 24 Apr 2018 09:51:39 +0800 Subject: [PATCH 0039/1852] media: i2c: add ov13850 driver for rkisp1 Change-Id: I1a761130a6f6d332343bd29601594c074c0d7702 Signed-off-by: Hu Kejun --- drivers/media/i2c/Kconfig | 12 + drivers/media/i2c/Makefile | 1 + drivers/media/i2c/ov13850.c | 1375 +++++++++++++++++++++++++++++++++++ 3 files changed, 1388 insertions(+) create mode 100644 drivers/media/i2c/ov13850.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index fb3d143fbfd3c..06f0ce851fa1c 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -587,6 +587,18 @@ config VIDEO_OV9650 This is a V4L2 sensor-level driver for the Omnivision OV9650 and OV9652 camera sensors. +config VIDEO_OV13850 + tristate "OmniVision OV13850 sensor support" + depends on VIDEO_V4L2 && I2C && MEDIA_CONTROLLER + depends on MEDIA_CAMERA_SUPPORT + select V4L2_FWNODE + ---help--- + This is a Video4Linux2 sensor-level driver for the OmniVision + OV13850 camera. + + To compile this driver as a module, choose M here: the + module will be called ov13850. + config VIDEO_VS6624 tristate "ST VS6624 sensor support" depends on VIDEO_V4L2 && I2C diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index 707b505648f32..f871b6b42aefa 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -62,6 +62,7 @@ obj-$(CONFIG_VIDEO_OV5695) += ov5695.o obj-$(CONFIG_VIDEO_OV7640) += ov7640.o obj-$(CONFIG_VIDEO_OV7670) += ov7670.o obj-$(CONFIG_VIDEO_OV9650) += ov9650.o +obj-$(CONFIG_VIDEO_OV13850) += ov13850.o obj-$(CONFIG_VIDEO_MT9M032) += mt9m032.o obj-$(CONFIG_VIDEO_MT9P031) += mt9p031.o obj-$(CONFIG_VIDEO_MT9T001) += mt9t001.o diff --git a/drivers/media/i2c/ov13850.c b/drivers/media/i2c/ov13850.c new file mode 100644 index 0000000000000..7df5ac335eea4 --- /dev/null +++ b/drivers/media/i2c/ov13850.c @@ -0,0 +1,1375 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * ov13850 driver + * + * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef V4L2_CID_DIGITAL_GAIN +#define V4L2_CID_DIGITAL_GAIN V4L2_CID_GAIN +#endif + +/* 45Mhz * 4 Binning */ +#define OV13850_PIXEL_RATE (45 * 1000 * 1000 * 4) +#define OV13850_XVCLK_FREQ 24000000 + +#define CHIP_ID 0x00d850 +#define OV13850_REG_CHIP_ID 0x300a + +#define OV13850_REG_CTRL_MODE 0x0100 +#define OV13850_MODE_SW_STANDBY 0x0 +#define OV13850_MODE_STREAMING BIT(0) + +#define OV13850_REG_EXPOSURE 0x3500 +#define OV13850_EXPOSURE_MIN 4 +#define OV13850_EXPOSURE_STEP 1 +#define OV13850_VTS_MAX 0x7fff + +#define OV13850_REG_GAIN_H 0x350a +#define OV13850_REG_GAIN_L 0x350b +#define OV13850_GAIN_H_MASK 0x07 +#define OV13850_GAIN_H_SHIFT 8 +#define OV13850_GAIN_L_MASK 0xff +#define OV13850_GAIN_MIN 0x10 +#define OV13850_GAIN_MAX 0xf8 +#define OV13850_GAIN_STEP 1 +#define OV13850_GAIN_DEFAULT 0x10 + +#define OV13850_REG_TEST_PATTERN 0x5e00 +#define OV13850_TEST_PATTERN_ENABLE 0x80 +#define OV13850_TEST_PATTERN_DISABLE 0x0 + +#define OV13850_REG_VTS 0x380e + +#define REG_NULL 0xFFFF + +#define OV13850_REG_VALUE_08BIT 1 +#define OV13850_REG_VALUE_16BIT 2 +#define OV13850_REG_VALUE_24BIT 3 + +#define OV13850_LANES 2 +#define OV13850_BITS_PER_SAMPLE 10 + +#define OV13850_CHIP_REVISION_REG 0x302A +#define OV13850_R1A 0xb1 +#define OV13850_R2A 0xb2 + +#define OF_CAMERA_PINCTRL_STATE_DEFAULT "rockchip,camera_default" +#define OF_CAMERA_PINCTRL_STATE_SLEEP "rockchip,camera_sleep" + +static const struct regval *ov13850_global_regs; + +static const char * const ov13850_supply_names[] = { + "avdd", /* Analog power */ + "dovdd", /* Digital I/O power */ + "dvdd", /* Digital core power */ +}; + +#define OV13850_NUM_SUPPLIES ARRAY_SIZE(ov13850_supply_names) + +struct regval { + u16 addr; + u8 val; +}; + +struct ov13850_mode { + u32 width; + u32 height; + u32 max_fps; + u32 hts_def; + u32 vts_def; + u32 exp_def; + const struct regval *reg_list; +}; + +struct ov13850 { + struct i2c_client *client; + struct clk *xvclk; + struct gpio_desc *reset_gpio; + struct gpio_desc *pwdn_gpio; + struct regulator_bulk_data supplies[OV13850_NUM_SUPPLIES]; + + struct pinctrl *pinctrl; + struct pinctrl_state *pins_default; + struct pinctrl_state *pins_sleep; + + struct v4l2_subdev subdev; + struct media_pad pad; + struct v4l2_ctrl_handler ctrl_handler; + struct v4l2_ctrl *exposure; + struct v4l2_ctrl *anal_gain; + struct v4l2_ctrl *digi_gain; + struct v4l2_ctrl *hblank; + struct v4l2_ctrl *vblank; + struct v4l2_ctrl *test_pattern; + struct mutex mutex; + bool streaming; + const struct ov13850_mode *cur_mode; +}; + +#define to_ov13850(sd) container_of(sd, struct ov13850, subdev) + +/* + * Xclk 24Mhz + */ +static const struct regval ov13850_global_regs_r1a[] = { + {0x0103, 0x01}, + {0x0300, 0x00}, + {0x0301, 0x00}, + {0x0302, 0x32}, + {0x0303, 0x01}, + {0x030a, 0x00}, + {0x300f, 0x11}, + {0x3010, 0x01}, + {0x3011, 0x76}, + {0x3012, 0x21}, + {0x3013, 0x12}, + {0x3014, 0x11}, + {0x3015, 0xc0}, + {0x301f, 0x03}, + {0x3106, 0x00}, + {0x3210, 0x47}, + {0x3500, 0x00}, + {0x3501, 0x60}, + {0x3502, 0x00}, + {0x3506, 0x00}, + {0x3507, 0x02}, + {0x3508, 0x00}, + {0x350a, 0x00}, + {0x350b, 0x80}, + {0x350e, 0x00}, + {0x350f, 0x10}, + {0x3600, 0x40}, + {0x3601, 0xfc}, + {0x3602, 0x02}, + {0x3603, 0x48}, + {0x3604, 0xa5}, + {0x3605, 0x9f}, + {0x3607, 0x00}, + {0x360a, 0x40}, + {0x360b, 0x91}, + {0x360c, 0x49}, + {0x360f, 0x8a}, + {0x3611, 0x10}, + {0x3612, 0x27}, + {0x3613, 0x33}, + {0x3615, 0x08}, + {0x3641, 0x02}, + {0x3660, 0x82}, + {0x3668, 0x54}, + {0x3669, 0x40}, + {0x3667, 0xa0}, + {0x3702, 0x40}, + {0x3703, 0x44}, + {0x3704, 0x2c}, + {0x3705, 0x24}, + {0x3706, 0x50}, + {0x3707, 0x44}, + {0x3708, 0x3c}, + {0x3709, 0x1f}, + {0x370a, 0x26}, + {0x370b, 0x3c}, + {0x3720, 0x66}, + {0x3722, 0x84}, + {0x3728, 0x40}, + {0x372a, 0x00}, + {0x372f, 0x90}, + {0x3710, 0x28}, + {0x3716, 0x03}, + {0x3718, 0x10}, + {0x3719, 0x08}, + {0x371c, 0xfc}, + {0x3760, 0x13}, + {0x3761, 0x34}, + {0x3767, 0x24}, + {0x3768, 0x06}, + {0x3769, 0x45}, + {0x376c, 0x23}, + {0x3d84, 0x00}, + {0x3d85, 0x17}, + {0x3d8c, 0x73}, + {0x3d8d, 0xbf}, + {0x3800, 0x00}, + {0x3801, 0x08}, + {0x3802, 0x00}, + {0x3803, 0x04}, + {0x3804, 0x10}, + {0x3805, 0x97}, + {0x3806, 0x0c}, + {0x3807, 0x4b}, + {0x3808, 0x08}, + {0x3809, 0x40}, + {0x380a, 0x06}, + {0x380b, 0x20}, + {0x380c, 0x12}, + {0x380d, 0xc0}, + {0x380e, 0x06}, + {0x380f, 0x80}, + {0x3810, 0x00}, + {0x3811, 0x04}, + {0x3812, 0x00}, + {0x3813, 0x02}, + {0x3814, 0x31}, + {0x3815, 0x31}, + {0x3820, 0x02}, + {0x3821, 0x05}, + {0x3834, 0x00}, + {0x3835, 0x1c}, + {0x3836, 0x08}, + {0x3837, 0x02}, + {0x4000, 0xf1}, + {0x4001, 0x00}, + {0x400b, 0x0c}, + {0x4011, 0x00}, + {0x401a, 0x00}, + {0x401b, 0x00}, + {0x401c, 0x00}, + {0x401d, 0x00}, + {0x4020, 0x00}, + {0x4021, 0xE4}, + {0x4022, 0x07}, + {0x4023, 0x5F}, + {0x4024, 0x08}, + {0x4025, 0x44}, + {0x4026, 0x08}, + {0x4027, 0x47}, + {0x4028, 0x00}, + {0x4029, 0x02}, + {0x402a, 0x04}, + {0x402b, 0x08}, + {0x402c, 0x02}, + {0x402d, 0x02}, + {0x402e, 0x0c}, + {0x402f, 0x08}, + {0x403d, 0x2c}, + {0x403f, 0x7f}, + {0x4500, 0x82}, + {0x4501, 0x38}, + {0x4601, 0x04}, + {0x4602, 0x22}, + {0x4603, 0x01}, + {0x4837, 0x1b}, + {0x4d00, 0x04}, + {0x4d01, 0x42}, + {0x4d02, 0xd1}, + {0x4d03, 0x90}, + {0x4d04, 0x66}, + {0x4d05, 0x65}, + {0x5000, 0x0e}, + {0x5001, 0x01}, + {0x5002, 0x07}, + {0x5013, 0x40}, + {0x501c, 0x00}, + {0x501d, 0x10}, + {0x5242, 0x00}, + {0x5243, 0xb8}, + {0x5244, 0x00}, + {0x5245, 0xf9}, + {0x5246, 0x00}, + {0x5247, 0xf6}, + {0x5248, 0x00}, + {0x5249, 0xa6}, + {0x5300, 0xfc}, + {0x5301, 0xdf}, + {0x5302, 0x3f}, + {0x5303, 0x08}, + {0x5304, 0x0c}, + {0x5305, 0x10}, + {0x5306, 0x20}, + {0x5307, 0x40}, + {0x5308, 0x08}, + {0x5309, 0x08}, + {0x530a, 0x02}, + {0x530b, 0x01}, + {0x530c, 0x01}, + {0x530d, 0x0c}, + {0x530e, 0x02}, + {0x530f, 0x01}, + {0x5310, 0x01}, + {0x5400, 0x00}, + {0x5401, 0x61}, + {0x5402, 0x00}, + {0x5403, 0x00}, + {0x5404, 0x00}, + {0x5405, 0x40}, + {0x540c, 0x05}, + {0x5b00, 0x00}, + {0x5b01, 0x00}, + {0x5b02, 0x01}, + {0x5b03, 0xff}, + {0x5b04, 0x02}, + {0x5b05, 0x6c}, + {0x5b09, 0x02}, + {0x5e00, 0x00}, + {0x5e10, 0x1c}, + {REG_NULL, 0x00}, +}; + +/* + * Xclk 24Mhz + */ +static const struct regval ov13850_global_regs_r2a[] = { + {0x0300, 0x01}, + {0x0301, 0x00}, + {0x0302, 0x28}, + {0x0303, 0x00}, + {0x030a, 0x00}, + {0x300f, 0x11}, + {0x3010, 0x01}, + {0x3011, 0x76}, + {0x3012, 0x21}, + {0x3013, 0x12}, + {0x3014, 0x11}, + {0x301f, 0x03}, + {0x3106, 0x00}, + {0x3210, 0x47}, + {0x3500, 0x00}, + {0x3501, 0x60}, + {0x3502, 0x00}, + {0x3506, 0x00}, + {0x3507, 0x02}, + {0x3508, 0x00}, + {0x350a, 0x00}, + {0x350b, 0x80}, + {0x350e, 0x00}, + {0x350f, 0x10}, + {0x351a, 0x00}, + {0x351b, 0x10}, + {0x351c, 0x00}, + {0x351d, 0x20}, + {0x351e, 0x00}, + {0x351f, 0x40}, + {0x3520, 0x00}, + {0x3521, 0x80}, + {0x3600, 0xc0}, + {0x3601, 0xfc}, + {0x3602, 0x02}, + {0x3603, 0x78}, + {0x3604, 0xb1}, + {0x3605, 0xb5}, + {0x3606, 0x73}, + {0x3607, 0x07}, + {0x3609, 0x40}, + {0x360a, 0x30}, + {0x360b, 0x91}, + {0x360c, 0x09}, + {0x360f, 0x02}, + {0x3611, 0x10}, + {0x3612, 0x27}, + {0x3613, 0x33}, + {0x3615, 0x0c}, + {0x3616, 0x0e}, + {0x3641, 0x02}, + {0x3660, 0x82}, + {0x3668, 0x54}, + {0x3669, 0x00}, + {0x366a, 0x3f}, + {0x3667, 0xa0}, + {0x3702, 0x40}, + {0x3703, 0x44}, + {0x3704, 0x2c}, + {0x3705, 0x01}, + {0x3706, 0x15}, + {0x3707, 0x44}, + {0x3708, 0x3c}, + {0x3709, 0x1f}, + {0x370a, 0x27}, + {0x370b, 0x3c}, + {0x3720, 0x55}, + {0x3722, 0x84}, + {0x3728, 0x40}, + {0x372a, 0x00}, + {0x372b, 0x02}, + {0x372e, 0x22}, + {0x372f, 0x90}, + {0x3730, 0x00}, + {0x3731, 0x00}, + {0x3732, 0x00}, + {0x3733, 0x00}, + {0x3710, 0x28}, + {0x3716, 0x03}, + {0x3718, 0x10}, + {0x3719, 0x0c}, + {0x371a, 0x08}, + {0x371c, 0xfc}, + {0x3748, 0x00}, + {0x3760, 0x13}, + {0x3761, 0x33}, + {0x3762, 0x86}, + {0x3763, 0x16}, + {0x3767, 0x24}, + {0x3768, 0x06}, + {0x3769, 0x45}, + {0x376c, 0x23}, + {0x376f, 0x80}, + {0x3773, 0x06}, + {0x3d84, 0x00}, + {0x3d85, 0x17}, + {0x3d8c, 0x73}, + {0x3d8d, 0xbf}, + {0x3800, 0x00}, + {0x3801, 0x08}, + {0x3802, 0x00}, + {0x3803, 0x04}, + {0x3804, 0x10}, + {0x3805, 0x97}, + {0x3806, 0x0c}, + {0x3807, 0x4b}, + {0x3808, 0x08}, + {0x3809, 0x40}, + {0x380a, 0x06}, + {0x380b, 0x20}, + {0x380c, 0x12}, + {0x380d, 0xc0}, + {0x380e, 0x06}, + {0x380f, 0x80}, + {0x3810, 0x00}, + {0x3811, 0x04}, + {0x3812, 0x00}, + {0x3813, 0x02}, + {0x3814, 0x31}, + {0x3815, 0x31}, + {0x3820, 0x02}, + {0x3821, 0x06}, + {0x3823, 0x00}, + {0x3826, 0x00}, + {0x3827, 0x02}, + {0x3834, 0x00}, + {0x3835, 0x1c}, + {0x3836, 0x08}, + {0x3837, 0x02}, + {0x4000, 0xf1}, + {0x4001, 0x00}, + {0x4006, 0x04}, + {0x4007, 0x04}, + {0x400b, 0x0c}, + {0x4011, 0x00}, + {0x401a, 0x00}, + {0x401b, 0x00}, + {0x401c, 0x00}, + {0x401d, 0x00}, + {0x4020, 0x00}, + {0x4021, 0xe4}, + {0x4022, 0x04}, + {0x4023, 0xd7}, + {0x4024, 0x05}, + {0x4025, 0xbc}, + {0x4026, 0x05}, + {0x4027, 0xbf}, + {0x4028, 0x00}, + {0x4029, 0x02}, + {0x402a, 0x04}, + {0x402b, 0x08}, + {0x402c, 0x02}, + {0x402d, 0x02}, + {0x402e, 0x0c}, + {0x402f, 0x08}, + {0x403d, 0x2c}, + {0x403f, 0x7f}, + {0x4041, 0x07}, + {0x4500, 0x82}, + {0x4501, 0x3c}, + {0x458b, 0x00}, + {0x459c, 0x00}, + {0x459d, 0x00}, + {0x459e, 0x00}, + {0x4601, 0x83}, + {0x4602, 0x22}, + {0x4603, 0x01}, + {0x4837, 0x19}, + {0x4d00, 0x04}, + {0x4d01, 0x42}, + {0x4d02, 0xd1}, + {0x4d03, 0x90}, + {0x4d04, 0x66}, + {0x4d05, 0x65}, + {0x4d0b, 0x00}, + {0x5000, 0x0e}, + {0x5001, 0x01}, + {0x5002, 0x07}, + {0x5013, 0x40}, + {0x501c, 0x00}, + {0x501d, 0x10}, + {0x510f, 0xfc}, + {0x5110, 0xf0}, + {0x5111, 0x10}, + {0x536d, 0x02}, + {0x536e, 0x67}, + {0x536f, 0x01}, + {0x5370, 0x4c}, + {0x5400, 0x00}, + {0x5400, 0x00}, + {0x5401, 0x61}, + {0x5402, 0x00}, + {0x5403, 0x00}, + {0x5404, 0x00}, + {0x5405, 0x40}, + {0x540c, 0x05}, + {0x5501, 0x00}, + {0x5b00, 0x00}, + {0x5b01, 0x00}, + {0x5b02, 0x01}, + {0x5b03, 0xff}, + {0x5b04, 0x02}, + {0x5b05, 0x6c}, + {0x5b09, 0x02}, + {0x5e00, 0x00}, + {0x5e10, 0x1c}, + {REG_NULL, 0x00}, +}; + +/* + * Xclk 24Mhz + * max_framerate 30fps + * mipi_datarate per lane 600Mbps + */ +static const struct regval ov13850_2112x1568_regs[] = { + {0x3612, 0x27}, + {0x370a, 0x26}, + {0x372a, 0x00}, + {0x372f, 0x90}, + {0x3801, 0x08}, + {0x3805, 0x97}, + {0x3807, 0x4b}, + {0x3808, 0x08}, + {0x3809, 0x40}, + {0x380a, 0x06}, + {0x380b, 0x20}, + {0x380c, 0x12}, + {0x380d, 0xc0}, + {0x380e, 0x06}, + {0x380f, 0x80}, + {0x3813, 0x02}, + {0x3814, 0x31}, + {0x3815, 0x31}, + {0x3820, 0x02}, + {0x3821, 0x05}, + {0x3836, 0x08}, + {0x3837, 0x02}, + {0x4601, 0x04}, + {0x4603, 0x00}, + {0x4020, 0x00}, + {0x4021, 0xE4}, + {0x4022, 0x07}, + {0x4023, 0x5F}, + {0x4024, 0x08}, + {0x4025, 0x44}, + {0x4026, 0x08}, + {0x4027, 0x47}, + {0x4603, 0x01}, + {0x5401, 0x61}, + {0x5405, 0x40}, + {REG_NULL, 0x00}, +}; + +static const struct ov13850_mode supported_modes[] = { + { + .width = 2112, + .height = 1568, + .max_fps = 30, + .exp_def = 0x0600, + .hts_def = 0x12c0, + .vts_def = 0x0680, + .reg_list = ov13850_2112x1568_regs, + }, +}; + +#define OV13850_LINK_FREQ_300MHZ 300000000 +static const s64 link_freq_menu_items[] = { + OV13850_LINK_FREQ_300MHZ +}; + +static const char * const ov13850_test_pattern_menu[] = { + "Disabled", + "Vertical Color Bar Type 1", + "Vertical Color Bar Type 2", + "Vertical Color Bar Type 3", + "Vertical Color Bar Type 4" +}; + +/* Write registers up to 4 at a time */ +static int ov13850_write_reg(struct i2c_client *client, u16 reg, + u32 len, u32 val) +{ + u32 buf_i, val_i; + u8 buf[6]; + u8 *val_p; + __be32 val_be; + + if (len > 4) + return -EINVAL; + + buf[0] = reg >> 8; + buf[1] = reg & 0xff; + + val_be = cpu_to_be32(val); + val_p = (u8 *)&val_be; + buf_i = 2; + val_i = 4 - len; + + while (val_i < 4) + buf[buf_i++] = val_p[val_i++]; + + if (i2c_master_send(client, buf, len + 2) != len + 2) + return -EIO; + + return 0; +} + +static int ov13850_write_array(struct i2c_client *client, + const struct regval *regs) +{ + u32 i; + int ret = 0; + + for (i = 0; ret == 0 && regs[i].addr != REG_NULL; i++) + ret = ov13850_write_reg(client, regs[i].addr, + OV13850_REG_VALUE_08BIT, + regs[i].val); + + return ret; +} + +/* Read registers up to 4 at a time */ +static int ov13850_read_reg(struct i2c_client *client, u16 reg, + unsigned int len, u32 *val) +{ + struct i2c_msg msgs[2]; + u8 *data_be_p; + __be32 data_be = 0; + __be16 reg_addr_be = cpu_to_be16(reg); + int ret; + + if (len > 4 || !len) + return -EINVAL; + + data_be_p = (u8 *)&data_be; + /* Write register address */ + msgs[0].addr = client->addr; + msgs[0].flags = 0; + msgs[0].len = 2; + msgs[0].buf = (u8 *)®_addr_be; + + /* Read data from register */ + msgs[1].addr = client->addr; + msgs[1].flags = I2C_M_RD; + msgs[1].len = len; + msgs[1].buf = &data_be_p[4 - len]; + + ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); + if (ret != ARRAY_SIZE(msgs)) + return -EIO; + + *val = be32_to_cpu(data_be); + + return 0; +} + +static int ov13850_get_reso_dist(const struct ov13850_mode *mode, + struct v4l2_mbus_framefmt *framefmt) +{ + return abs(mode->width - framefmt->width) + + abs(mode->height - framefmt->height); +} + +static const struct ov13850_mode * +ov13850_find_best_fit(struct v4l2_subdev_format *fmt) +{ + struct v4l2_mbus_framefmt *framefmt = &fmt->format; + int dist; + int cur_best_fit = 0; + int cur_best_fit_dist = -1; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(supported_modes); i++) { + dist = ov13850_get_reso_dist(&supported_modes[i], framefmt); + if (cur_best_fit_dist == -1 || dist < cur_best_fit_dist) { + cur_best_fit_dist = dist; + cur_best_fit = i; + } + } + + return &supported_modes[cur_best_fit]; +} + +static int ov13850_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +{ + struct ov13850 *ov13850 = to_ov13850(sd); + const struct ov13850_mode *mode; + s64 h_blank, vblank_def; + + mutex_lock(&ov13850->mutex); + + mode = ov13850_find_best_fit(fmt); + fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10; + fmt->format.width = mode->width; + fmt->format.height = mode->height; + fmt->format.field = V4L2_FIELD_NONE; + if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; +#else + mutex_unlock(&ov13850->mutex); + return -ENOTTY; +#endif + } else { + ov13850->cur_mode = mode; + h_blank = mode->hts_def - mode->width; + __v4l2_ctrl_modify_range(ov13850->hblank, h_blank, + h_blank, 1, h_blank); + vblank_def = mode->vts_def - mode->height; + __v4l2_ctrl_modify_range(ov13850->vblank, vblank_def, + OV13850_VTS_MAX - mode->height, + 1, vblank_def); + } + + mutex_unlock(&ov13850->mutex); + + return 0; +} + +static int ov13850_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +{ + struct ov13850 *ov13850 = to_ov13850(sd); + const struct ov13850_mode *mode = ov13850->cur_mode; + + mutex_lock(&ov13850->mutex); + if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); +#else + mutex_unlock(&ov13850->mutex); + return -ENOTTY; +#endif + } else { + fmt->format.width = mode->width; + fmt->format.height = mode->height; + fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10; + fmt->format.field = V4L2_FIELD_NONE; + } + mutex_unlock(&ov13850->mutex); + + return 0; +} + +static int ov13850_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_mbus_code_enum *code) +{ + if (code->index != 0) + return -EINVAL; + code->code = MEDIA_BUS_FMT_SBGGR10_1X10; + + return 0; +} + +static int ov13850_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_frame_size_enum *fse) +{ + if (fse->index >= ARRAY_SIZE(supported_modes)) + return -EINVAL; + + if (fse->code != MEDIA_BUS_FMT_SBGGR10_1X10) + return -EINVAL; + + fse->min_width = supported_modes[fse->index].width; + fse->max_width = supported_modes[fse->index].width; + fse->max_height = supported_modes[fse->index].height; + fse->min_height = supported_modes[fse->index].height; + + return 0; +} + +static int ov13850_enable_test_pattern(struct ov13850 *ov13850, u32 pattern) +{ + u32 val; + + if (pattern) + val = (pattern - 1) | OV13850_TEST_PATTERN_ENABLE; + else + val = OV13850_TEST_PATTERN_DISABLE; + + return ov13850_write_reg(ov13850->client, + OV13850_REG_TEST_PATTERN, + OV13850_REG_VALUE_08BIT, + val); +} + +static int __ov13850_start_stream(struct ov13850 *ov13850) +{ + int ret; + + ret = ov13850_write_array(ov13850->client, ov13850_global_regs); + if (ret) + return ret; + + ret = ov13850_write_array(ov13850->client, ov13850->cur_mode->reg_list); + if (ret) + return ret; + + /* In case these controls are set before streaming */ + mutex_unlock(&ov13850->mutex); + ret = v4l2_ctrl_handler_setup(&ov13850->ctrl_handler); + mutex_lock(&ov13850->mutex); + if (ret) + return ret; + + return ov13850_write_reg(ov13850->client, + OV13850_REG_CTRL_MODE, + OV13850_REG_VALUE_08BIT, + OV13850_MODE_STREAMING); +} + +static int __ov13850_stop_stream(struct ov13850 *ov13850) +{ + return ov13850_write_reg(ov13850->client, + OV13850_REG_CTRL_MODE, + OV13850_REG_VALUE_08BIT, + OV13850_MODE_SW_STANDBY); +} + +static int ov13850_s_stream(struct v4l2_subdev *sd, int on) +{ + struct ov13850 *ov13850 = to_ov13850(sd); + struct i2c_client *client = ov13850->client; + int ret = 0; + + mutex_lock(&ov13850->mutex); + on = !!on; + if (on == ov13850->streaming) + goto unlock_and_return; + + if (on) { + ret = pm_runtime_get_sync(&client->dev); + if (ret < 0) { + pm_runtime_put_noidle(&client->dev); + goto unlock_and_return; + } + + ret = __ov13850_start_stream(ov13850); + if (ret) { + v4l2_err(sd, "start stream failed while write regs\n"); + pm_runtime_put(&client->dev); + goto unlock_and_return; + } + } else { + __ov13850_stop_stream(ov13850); + pm_runtime_put(&client->dev); + } + + ov13850->streaming = on; + +unlock_and_return: + mutex_unlock(&ov13850->mutex); + + return ret; +} + +/* Calculate the delay in us by clock rate and clock cycles */ +static inline u32 ov13850_cal_delay(u32 cycles) +{ + return DIV_ROUND_UP(cycles, OV13850_XVCLK_FREQ / 1000 / 1000); +} + +static int __ov13850_power_on(struct ov13850 *ov13850) +{ + int ret; + u32 delay_us; + struct device *dev = &ov13850->client->dev; + + if (!IS_ERR_OR_NULL(ov13850->pins_default)) { + ret = pinctrl_select_state(ov13850->pinctrl, + ov13850->pins_default); + if (ret < 0) + dev_err(dev, "could not set pins\n"); + } + + ret = clk_prepare_enable(ov13850->xvclk); + if (ret < 0) { + dev_err(dev, "Failed to enable xvclk\n"); + return ret; + } + + if (!IS_ERR(ov13850->reset_gpio)) + gpiod_set_value_cansleep(ov13850->reset_gpio, 0); + + ret = regulator_bulk_enable(OV13850_NUM_SUPPLIES, ov13850->supplies); + if (ret < 0) { + dev_err(dev, "Failed to enable regulators\n"); + goto disable_clk; + } + + if (!IS_ERR(ov13850->reset_gpio)) + gpiod_set_value_cansleep(ov13850->reset_gpio, 1); + + usleep_range(500, 1000); + if (!IS_ERR(ov13850->pwdn_gpio)) + gpiod_set_value_cansleep(ov13850->pwdn_gpio, 1); + + /* 8192 cycles prior to first SCCB transaction */ + delay_us = ov13850_cal_delay(8192); + usleep_range(delay_us, delay_us * 2); + + return 0; + +disable_clk: + clk_disable_unprepare(ov13850->xvclk); + + return ret; +} + +static void __ov13850_power_off(struct ov13850 *ov13850) +{ + int ret; + struct device *dev = &ov13850->client->dev; + + if (!IS_ERR(ov13850->pwdn_gpio)) + gpiod_set_value_cansleep(ov13850->pwdn_gpio, 0); + clk_disable_unprepare(ov13850->xvclk); + if (!IS_ERR(ov13850->reset_gpio)) + gpiod_set_value_cansleep(ov13850->reset_gpio, 0); + if (!IS_ERR_OR_NULL(ov13850->pins_sleep)) { + ret = pinctrl_select_state(ov13850->pinctrl, + ov13850->pins_sleep); + if (ret < 0) + dev_dbg(dev, "could not set pins\n"); + } + regulator_bulk_disable(OV13850_NUM_SUPPLIES, ov13850->supplies); +} + +static int ov13850_runtime_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct ov13850 *ov13850 = to_ov13850(sd); + + return __ov13850_power_on(ov13850); +} + +static int ov13850_runtime_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct ov13850 *ov13850 = to_ov13850(sd); + + __ov13850_power_off(ov13850); + + return 0; +} + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API +static int ov13850_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + struct ov13850 *ov13850 = to_ov13850(sd); + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->pad, 0); + const struct ov13850_mode *def_mode = &supported_modes[0]; + + mutex_lock(&ov13850->mutex); + /* Initialize try_fmt */ + try_fmt->width = def_mode->width; + try_fmt->height = def_mode->height; + try_fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10; + try_fmt->field = V4L2_FIELD_NONE; + + mutex_unlock(&ov13850->mutex); + /* No crop or compose */ + + return 0; +} +#endif + +static const struct dev_pm_ops ov13850_pm_ops = { + SET_RUNTIME_PM_OPS(ov13850_runtime_suspend, + ov13850_runtime_resume, NULL) +}; + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API +static const struct v4l2_subdev_internal_ops ov13850_internal_ops = { + .open = ov13850_open, +}; +#endif + +static const struct v4l2_subdev_video_ops ov13850_video_ops = { + .s_stream = ov13850_s_stream, +}; + +static const struct v4l2_subdev_pad_ops ov13850_pad_ops = { + .enum_mbus_code = ov13850_enum_mbus_code, + .enum_frame_size = ov13850_enum_frame_sizes, + .get_fmt = ov13850_get_fmt, + .set_fmt = ov13850_set_fmt, +}; + +static const struct v4l2_subdev_ops ov13850_subdev_ops = { + .video = &ov13850_video_ops, + .pad = &ov13850_pad_ops, +}; + +static int ov13850_set_ctrl(struct v4l2_ctrl *ctrl) +{ + struct ov13850 *ov13850 = container_of(ctrl->handler, + struct ov13850, ctrl_handler); + struct i2c_client *client = ov13850->client; + s64 max; + int ret = 0; + + /* Propagate change of current control to all related controls */ + switch (ctrl->id) { + case V4L2_CID_VBLANK: + /* Update max exposure while meeting expected vblanking */ + max = ov13850->cur_mode->height + ctrl->val - 4; + __v4l2_ctrl_modify_range(ov13850->exposure, + ov13850->exposure->minimum, max, + ov13850->exposure->step, + ov13850->exposure->default_value); + break; + } + + if (pm_runtime_get(&client->dev) <= 0) + return 0; + + switch (ctrl->id) { + case V4L2_CID_EXPOSURE: + /* 4 least significant bits of expsoure are fractional part */ + ret = ov13850_write_reg(ov13850->client, + OV13850_REG_EXPOSURE, + OV13850_REG_VALUE_24BIT, + ctrl->val << 4); + break; + case V4L2_CID_ANALOGUE_GAIN: + ret = ov13850_write_reg(ov13850->client, + OV13850_REG_GAIN_H, + OV13850_REG_VALUE_08BIT, + (ctrl->val >> OV13850_GAIN_H_SHIFT) & + OV13850_GAIN_H_MASK); + ret |= ov13850_write_reg(ov13850->client, + OV13850_REG_GAIN_L, + OV13850_REG_VALUE_08BIT, + ctrl->val & OV13850_GAIN_L_MASK); + break; + case V4L2_CID_VBLANK: + ret = ov13850_write_reg(ov13850->client, + OV13850_REG_VTS, + OV13850_REG_VALUE_16BIT, + ctrl->val + ov13850->cur_mode->height); + break; + case V4L2_CID_TEST_PATTERN: + ret = ov13850_enable_test_pattern(ov13850, ctrl->val); + break; + default: + dev_warn(&client->dev, "%s Unhandled id:0x%x, val:0x%x\n", + __func__, ctrl->id, ctrl->val); + break; + } + + pm_runtime_put(&client->dev); + + return ret; +} + +static const struct v4l2_ctrl_ops ov13850_ctrl_ops = { + .s_ctrl = ov13850_set_ctrl, +}; + +static int ov13850_initialize_controls(struct ov13850 *ov13850) +{ + const struct ov13850_mode *mode; + struct v4l2_ctrl_handler *handler; + struct v4l2_ctrl *ctrl; + s64 exposure_max, vblank_def; + u32 h_blank; + int ret; + + handler = &ov13850->ctrl_handler; + mode = ov13850->cur_mode; + ret = v4l2_ctrl_handler_init(handler, 8); + if (ret) + return ret; + handler->lock = &ov13850->mutex; + + ctrl = v4l2_ctrl_new_int_menu(handler, NULL, V4L2_CID_LINK_FREQ, + 0, 0, link_freq_menu_items); + if (ctrl) + ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; + + v4l2_ctrl_new_std(handler, NULL, V4L2_CID_PIXEL_RATE, + 0, OV13850_PIXEL_RATE, 1, OV13850_PIXEL_RATE); + + h_blank = mode->hts_def - mode->width; + ov13850->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, + h_blank, h_blank, 1, h_blank); + if (ov13850->hblank) + ov13850->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; + + vblank_def = mode->vts_def - mode->height; + ov13850->vblank = v4l2_ctrl_new_std(handler, &ov13850_ctrl_ops, + V4L2_CID_VBLANK, vblank_def, + OV13850_VTS_MAX - mode->height, + 1, vblank_def); + + exposure_max = mode->vts_def - 4; + ov13850->exposure = v4l2_ctrl_new_std(handler, &ov13850_ctrl_ops, + V4L2_CID_EXPOSURE, OV13850_EXPOSURE_MIN, + exposure_max, OV13850_EXPOSURE_STEP, + mode->exp_def); + + ov13850->anal_gain = v4l2_ctrl_new_std(handler, &ov13850_ctrl_ops, + V4L2_CID_ANALOGUE_GAIN, OV13850_GAIN_MIN, + OV13850_GAIN_MAX, OV13850_GAIN_STEP, + OV13850_GAIN_DEFAULT); + + ov13850->test_pattern = v4l2_ctrl_new_std_menu_items(handler, + &ov13850_ctrl_ops, V4L2_CID_TEST_PATTERN, + ARRAY_SIZE(ov13850_test_pattern_menu) - 1, + 0, 0, ov13850_test_pattern_menu); + + if (handler->error) { + ret = handler->error; + dev_err(&ov13850->client->dev, + "Failed to init controls(%d)\n", ret); + goto err_free_handler; + } + + ov13850->subdev.ctrl_handler = handler; + + return 0; + +err_free_handler: + v4l2_ctrl_handler_free(handler); + + return ret; +} + +static int ov13850_check_sensor_id(struct ov13850 *ov13850, + struct i2c_client *client) +{ + struct device *dev = &ov13850->client->dev; + u32 id = 0; + int ret; + + ret = ov13850_read_reg(client, OV13850_REG_CHIP_ID, + OV13850_REG_VALUE_16BIT, &id); + if (id != CHIP_ID) { + dev_err(dev, "Unexpected sensor id(%06x), ret(%d)\n", id, ret); + return ret; + } + + ret = ov13850_read_reg(client, OV13850_CHIP_REVISION_REG, + OV13850_REG_VALUE_08BIT, &id); + if (ret) { + dev_err(dev, "Read chip revision register error\n"); + return ret; + } + + if (id == OV13850_R2A) + ov13850_global_regs = ov13850_global_regs_r2a; + else + ov13850_global_regs = ov13850_global_regs_r1a; + dev_info(dev, "Detected OV%06x sensor, REVISION 0x%x\n", CHIP_ID, id); + + return 0; +} + +static int ov13850_configure_regulators(struct ov13850 *ov13850) +{ + unsigned int i; + + for (i = 0; i < OV13850_NUM_SUPPLIES; i++) + ov13850->supplies[i].supply = ov13850_supply_names[i]; + + return devm_regulator_bulk_get(&ov13850->client->dev, + OV13850_NUM_SUPPLIES, + ov13850->supplies); +} + +static int ov13850_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct device *dev = &client->dev; + struct ov13850 *ov13850; + struct v4l2_subdev *sd; + int ret; + + ov13850 = devm_kzalloc(dev, sizeof(*ov13850), GFP_KERNEL); + if (!ov13850) + return -ENOMEM; + + ov13850->client = client; + ov13850->cur_mode = &supported_modes[0]; + + ov13850->xvclk = devm_clk_get(dev, "xvclk"); + if (IS_ERR(ov13850->xvclk)) { + dev_err(dev, "Failed to get xvclk\n"); + return -EINVAL; + } + ret = clk_set_rate(ov13850->xvclk, OV13850_XVCLK_FREQ); + if (ret < 0) { + dev_err(dev, "Failed to set xvclk rate (24MHz)\n"); + return ret; + } + if (clk_get_rate(ov13850->xvclk) != OV13850_XVCLK_FREQ) + dev_warn(dev, "xvclk mismatched, modes are based on 24MHz\n"); + + ov13850->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); + if (IS_ERR(ov13850->reset_gpio)) + dev_warn(dev, "Failed to get reset-gpios\n"); + + ov13850->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); + if (IS_ERR(ov13850->pwdn_gpio)) + dev_warn(dev, "Failed to get pwdn-gpios\n"); + + ret = ov13850_configure_regulators(ov13850); + if (ret) { + dev_err(dev, "Failed to get power regulators\n"); + return ret; + } + + ov13850->pinctrl = devm_pinctrl_get(dev); + if (!IS_ERR(ov13850->pinctrl)) { + ov13850->pins_default = + pinctrl_lookup_state(ov13850->pinctrl, + OF_CAMERA_PINCTRL_STATE_DEFAULT); + if (IS_ERR(ov13850->pins_default)) + dev_err(dev, "could not get default pinstate\n"); + + ov13850->pins_sleep = + pinctrl_lookup_state(ov13850->pinctrl, + OF_CAMERA_PINCTRL_STATE_SLEEP); + if (IS_ERR(ov13850->pins_sleep)) + dev_err(dev, "could not get sleep pinstate\n"); + } + + mutex_init(&ov13850->mutex); + + sd = &ov13850->subdev; + v4l2_i2c_subdev_init(sd, client, &ov13850_subdev_ops); + ret = ov13850_initialize_controls(ov13850); + if (ret) + goto err_destroy_mutex; + + ret = __ov13850_power_on(ov13850); + if (ret) + goto err_free_handler; + + ret = ov13850_check_sensor_id(ov13850, client); + if (ret) + goto err_power_off; + +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + sd->internal_ops = &ov13850_internal_ops; + sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; +#endif +#if defined(CONFIG_MEDIA_CONTROLLER) + ov13850->pad.flags = MEDIA_PAD_FL_SOURCE; + sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR; + ret = media_entity_init(&sd->entity, 1, &ov13850->pad, 0); + if (ret < 0) + goto err_power_off; +#endif + + ret = v4l2_async_register_subdev(sd); + if (ret) { + dev_err(dev, "v4l2 async register subdev failed\n"); + goto err_clean_entity; + } + + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + pm_runtime_idle(dev); + + return 0; + +err_clean_entity: +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&sd->entity); +#endif +err_power_off: + __ov13850_power_off(ov13850); +err_free_handler: + v4l2_ctrl_handler_free(&ov13850->ctrl_handler); +err_destroy_mutex: + mutex_destroy(&ov13850->mutex); + + return ret; +} + +static int ov13850_remove(struct i2c_client *client) +{ + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct ov13850 *ov13850 = to_ov13850(sd); + + v4l2_async_unregister_subdev(sd); +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&sd->entity); +#endif + v4l2_ctrl_handler_free(&ov13850->ctrl_handler); + mutex_destroy(&ov13850->mutex); + + pm_runtime_disable(&client->dev); + if (!pm_runtime_status_suspended(&client->dev)) + __ov13850_power_off(ov13850); + pm_runtime_set_suspended(&client->dev); + + return 0; +} + +#if IS_ENABLED(CONFIG_OF) +static const struct of_device_id ov13850_of_match[] = { + { .compatible = "ovti,ov13850" }, + {}, +}; +MODULE_DEVICE_TABLE(of, ov13850_of_match); +#endif + +static const struct i2c_device_id ov13850_match_id[] = { + { "ovti,ov13850", 0 }, + { }, +}; + +static struct i2c_driver ov13850_i2c_driver = { + .driver = { + .name = "ov13850", + .pm = &ov13850_pm_ops, + .of_match_table = of_match_ptr(ov13850_of_match), + }, + .probe = &ov13850_probe, + .remove = &ov13850_remove, + .id_table = ov13850_match_id, +}; + +static int __init sensor_mod_init(void) +{ + return i2c_add_driver(&ov13850_i2c_driver); +} + +static void __exit sensor_mod_exit(void) +{ + i2c_del_driver(&ov13850_i2c_driver); +} + +device_initcall_sync(sensor_mod_init); +module_exit(sensor_mod_exit); + +MODULE_DESCRIPTION("OmniVision ov13850 sensor driver"); +MODULE_LICENSE("GPL v2"); From b74b2af59f74a24421b19968b95f59c2da5c4db6 Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 24 Apr 2018 11:43:06 +0800 Subject: [PATCH 0040/1852] arm64: dts: rockchip: add mipi_dphy_tx1rx1 and modify rkisp1_1 for rk3399 Change-Id: I94d01c6963dc5f2f9b61159df1b13fc0bb32a0f1 Signed-off-by: Hu Kejun --- arch/arm64/boot/dts/rockchip/rk3399.dtsi | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi index 7e2f455156224..406056aad9749 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -1910,7 +1910,7 @@ interrupts = ; interrupt-names = "isp0_mmu"; #iommu-cells = <0>; - clocks = <&cru ACLK_ISP0_NOC>, <&cru HCLK_ISP0_NOC>; + clocks = <&cru ACLK_ISP0_WRAPPER>, <&cru HCLK_ISP0_WRAPPER>; clock-names = "aclk", "hclk"; power-domains = <&power RK3399_PD_ISP0>; rk_iommu,disable_reset_quirk; @@ -1923,10 +1923,12 @@ interrupts = ; clocks = <&cru SCLK_ISP1>, <&cru ACLK_ISP1>, <&cru HCLK_ISP1>, - <&cru ACLK_ISP1_WRAPPER>, <&cru HCLK_ISP1_WRAPPER>; + <&cru ACLK_ISP1_WRAPPER>, <&cru HCLK_ISP1_WRAPPER>, + <&cru PCLK_ISP1_WRAPPER>; clock-names = "clk_isp", "aclk_isp", "hclk_isp", - "aclk_isp_wrap", "hclk_isp_wrap"; + "aclk_isp_wrap", "hclk_isp_wrap", + "pclk_isp_wrap"; devfreq = <&dmc>; power-domains = <&power RK3399_PD_ISP1>; iommus = <&isp1_mmu>; @@ -1939,7 +1941,7 @@ interrupts = ; interrupt-names = "isp1_mmu"; #iommu-cells = <0>; - clocks = <&cru ACLK_ISP1_NOC>, <&cru HCLK_ISP1_NOC>; + clocks = <&cru ACLK_ISP1_WRAPPER>, <&cru HCLK_ISP1_WRAPPER>; clock-names = "aclk", "hclk"; power-domains = <&power RK3399_PD_ISP1>; rk_iommu,disable_reset_quirk; @@ -2043,6 +2045,20 @@ }; }; + mipi_dphy_tx1rx1: mipi-dphy-tx1rx1@0xff968000 { + compatible = "rockchip,rk3399-mipi-dphy"; + reg = <0x0 0xff968000 0x0 0x8000>; + clocks = <&cru SCLK_MIPIDPHY_REF>, + <&cru SCLK_DPHY_TX1RX1_CFG>, + <&cru PCLK_VIO_GRF>, + <&cru PCLK_MIPI_DSI1>; + clock-names = "dphy-ref", "dphy-cfg", + "grf", "pclk_mipi_dsi"; + rockchip,grf = <&grf>; + power-domains = <&power RK3399_PD_VIO>; + status = "disabled"; + }; + edp: edp@ff970000 { compatible = "rockchip,rk3399-edp"; reg = <0x0 0xff970000 0x0 0x8000>; From 2decb2c09f0d2019270a55bf49a65c3707a4e700 Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Mon, 2 Jul 2018 09:20:53 +0800 Subject: [PATCH 0041/1852] media: rockchip: isp: enable SYS_STATUS_ISP status Change-Id: I6aba3566fa3ee6e5686998ba6970010609b603a3 Signed-off-by: Hu Kejun --- drivers/media/platform/rockchip/isp1/dev.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c index 0fa9723be0be3..c88534ef2a921 100644 --- a/drivers/media/platform/rockchip/isp1/dev.c +++ b/drivers/media/platform/rockchip/isp1/dev.c @@ -42,6 +42,8 @@ #include #include #include +#include +#include #include "regs.h" #include "rkisp1.h" #include "common.h" @@ -187,8 +189,10 @@ static int rkisp1_pipeline_set_stream(struct rkisp1_pipeline *p, bool on) (!on && atomic_dec_return(&p->stream_cnt) > 0)) return 0; - if (on) + if (on) { + rockchip_set_system_status(SYS_STATUS_ISP); v4l2_subdev_call(&dev->isp_sdev.sd, video, s_stream, true); + } /* phy -> sensor */ for (i = 0; i < p->num_subdevs; ++i) { @@ -197,8 +201,10 @@ static int rkisp1_pipeline_set_stream(struct rkisp1_pipeline *p, bool on) goto err_stream_off; } - if (!on) + if (!on) { v4l2_subdev_call(&dev->isp_sdev.sd, video, s_stream, false); + rockchip_clear_system_status(SYS_STATUS_ISP); + } return 0; @@ -206,6 +212,7 @@ static int rkisp1_pipeline_set_stream(struct rkisp1_pipeline *p, bool on) for (--i; i >= 0; --i) v4l2_subdev_call(p->subdevs[i], video, s_stream, false); v4l2_subdev_call(&dev->isp_sdev.sd, video, s_stream, false); + rockchip_clear_system_status(SYS_STATUS_ISP); return ret; } From 9d3a706691045cd84e1767213283c0c1b32a3ad1 Mon Sep 17 00:00:00 2001 From: Tomasz Figa Date: Tue, 15 May 2018 15:47:47 +0900 Subject: [PATCH 0042/1852] CHROMIUM: media: rockchip/isp1: Replace stream state with a boolean The rkisp1_state enum consists only of 3 entries, where 1 is completely unused and the other two respectively mean not streaming or streaming. Replace it with a boolean called "streaming". While at it, remove "saved_state" member from rkisp1_stream struct, as it is not used anywhere. BUG=b:78779539 TEST=Make sure camera works on scarlet. Change-Id: I329b62951e214a25ac35a5c189814cebba26dbf1 Signed-off-by: Tomasz Figa Reviewed-on: https://chromium-review.googlesource.com/1059006 Tested-by: yichong zhong Reviewed-by: Ricky Liang Reviewed-by: yichong zhong Reviewed-by: Alexandre Courbot --- .../media/platform/rockchip/isp1/capture.c | 24 +++++++-------- .../media/platform/rockchip/isp1/capture.h | 3 +- drivers/media/platform/rockchip/isp1/common.h | 9 ------ drivers/media/platform/rockchip/isp1/rkisp1.c | 30 +++++++++---------- 4 files changed, 28 insertions(+), 38 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/capture.c b/drivers/media/platform/rockchip/isp1/capture.c index 68acbfbbf7b55..116fcd1a998b1 100644 --- a/drivers/media/platform/rockchip/isp1/capture.c +++ b/drivers/media/platform/rockchip/isp1/capture.c @@ -878,7 +878,7 @@ static void mp_stop_mi(struct rkisp1_stream *stream) { void __iomem *base = stream->ispdev->base_addr; - if (stream->state != RKISP1_STATE_STREAMING) + if (!stream->streaming) return; stream->ops->clr_frame_end_int(base); stream->ops->disable_mi(stream); @@ -888,7 +888,7 @@ static void sp_stop_mi(struct rkisp1_stream *stream) { void __iomem *base = stream->ispdev->base_addr; - if (stream->state != RKISP1_STATE_STREAMING) + if (!stream->streaming) return; stream->ops->clr_frame_end_int(base); stream->ops->disable_mi(stream); @@ -980,13 +980,13 @@ static void rkisp1_stream_stop(struct rkisp1_stream *stream) stream->stopping = true; ret = wait_event_timeout(stream->done, - stream->state != RKISP1_STATE_STREAMING, + !stream->streaming, msecs_to_jiffies(1000)); if (!ret) { v4l2_warn(v4l2_dev, "waiting on event return error %d\n", ret); stream->ops->stop_mi(stream); stream->stopping = false; - stream->state = RKISP1_STATE_READY; + stream->streaming = false; } disable_dcrop(stream, true); disable_rsz(stream, true); @@ -1022,11 +1022,11 @@ static int rkisp1_start(struct rkisp1_stream *stream) * also required because the sencond FE maybe corrupt especially * when run at 120fps. */ - if (other->state != RKISP1_STATE_STREAMING) { + if (!other->streaming) { force_cfg_update(base); mi_frame_end(stream); } - stream->state = RKISP1_STATE_STREAMING; + stream->streaming = true; return 0; } @@ -1100,7 +1100,7 @@ static void rkisp1_buf_queue(struct vb2_buffer *vb) spin_lock_irqsave(&stream->vbq_lock, lock_flags); /* XXX: replace dummy to speed up */ - if (stream->state == RKISP1_STATE_STREAMING && + if (stream->streaming && stream->next_buf == NULL && atomic_read(&stream->ispdev->isp_sdev.frm_sync_seq) == 0) { stream->next_buf = ispbuf; @@ -1193,7 +1193,7 @@ static int rkisp1_stream_start(struct rkisp1_stream *stream) bool async = false; int ret; - if (other->state == RKISP1_STATE_STREAMING) + if (other->streaming) async = true; ret = rkisp1_config_rsz(stream, async); @@ -1224,7 +1224,7 @@ rkisp1_start_streaming(struct vb2_queue *queue, unsigned int count) struct v4l2_device *v4l2_dev = &dev->v4l2_dev; int ret; - if (WARN_ON(stream->state != RKISP1_STATE_READY)) + if (WARN_ON(stream->streaming)) return -EBUSY; ret = rkisp1_create_dummy_buf(stream); @@ -1331,7 +1331,7 @@ static void rkisp1_set_fmt(struct rkisp1_stream *stream, if (!pixm->quantization) pixm->quantization = V4L2_QUANTIZATION_FULL_RANGE; /* can not change quantization when stream-on */ - if (other_stream->state == RKISP1_STATE_STREAMING) + if (other_stream->streaming) pixm->quantization = other_stream->out_fmt.quantization; /* calculate size */ @@ -1408,7 +1408,7 @@ void rkisp1_stream_init(struct rkisp1_device *dev, u32 id) stream->config = &rkisp1_mp_stream_config; } - stream->state = RKISP1_STATE_READY; + stream->streaming = false; memset(&pixm, 0, sizeof(pixm)); pixm.pixelformat = V4L2_PIX_FMT_YUYV; @@ -1726,7 +1726,7 @@ void rkisp1_mi_isr(struct rkisp1_stream *stream) */ if (stream->ops->is_stream_stopped(dev->base_addr)) { stream->stopping = false; - stream->state = RKISP1_STATE_READY; + stream->streaming = false; wake_up(&stream->done); } else { stream->ops->stop_mi(stream); diff --git a/drivers/media/platform/rockchip/isp1/capture.h b/drivers/media/platform/rockchip/isp1/capture.h index f0989103daa14..94e580272b298 100644 --- a/drivers/media/platform/rockchip/isp1/capture.h +++ b/drivers/media/platform/rockchip/isp1/capture.h @@ -166,8 +166,6 @@ struct rkisp1_stream { u32 id; struct rkisp1_device *ispdev; struct rkisp1_vdev_node vnode; - enum rkisp1_state state; - enum rkisp1_state saved_state; struct capture_fmt out_isp_fmt; struct v4l2_pix_format_mplane out_fmt; struct v4l2_rect dcrop; @@ -178,6 +176,7 @@ struct rkisp1_stream { struct rkisp1_dummy_buffer dummy_buf; struct rkisp1_buffer *curr_buf; struct rkisp1_buffer *next_buf; + bool streaming; bool stopping; wait_queue_head_t done; union { diff --git a/drivers/media/platform/rockchip/isp1/common.h b/drivers/media/platform/rockchip/isp1/common.h index 1adfb9039b60e..0d78446fda288 100644 --- a/drivers/media/platform/rockchip/isp1/common.h +++ b/drivers/media/platform/rockchip/isp1/common.h @@ -85,15 +85,6 @@ enum rkisp1_fmt_raw_pat_type { RAW_BGGR, }; -enum rkisp1_state { - /* path not yet opened: */ - RKISP1_STATE_DISABLED, - /* path opened and configured, ready for streaming: */ - RKISP1_STATE_READY, - /* path is streaming: */ - RKISP1_STATE_STREAMING -}; - struct rkisp1_buffer { struct vb2_v4l2_buffer vb; struct list_head queue; diff --git a/drivers/media/platform/rockchip/isp1/rkisp1.c b/drivers/media/platform/rockchip/isp1/rkisp1.c index 0438d6ddba916..98098ff02db73 100644 --- a/drivers/media/platform/rockchip/isp1/rkisp1.c +++ b/drivers/media/platform/rockchip/isp1/rkisp1.c @@ -359,9 +359,9 @@ static int rkisp1_config_cif(struct rkisp1_device *dev) u32 cif_id; v4l2_dbg(1, rkisp1_debug, &dev->v4l2_dev, - "SP state = %d, MP state = %d\n", - dev->stream[RKISP1_STREAM_SP].state, - dev->stream[RKISP1_STREAM_MP].state); + "SP streaming = %d, MP streaming = %d\n", + dev->stream[RKISP1_STREAM_SP].streaming, + dev->stream[RKISP1_STREAM_MP].streaming); cif_id = readl(dev->base_addr + CIF_VI_ID); v4l2_dbg(1, rkisp1_debug, &dev->v4l2_dev, "CIF_ID 0x%08x\n", cif_id); @@ -384,9 +384,9 @@ static int rkisp1_isp_stop(struct rkisp1_device *dev) u32 val; v4l2_dbg(1, rkisp1_debug, &dev->v4l2_dev, - "SP state = %d, MP state = %d\n", - dev->stream[RKISP1_STREAM_SP].state, - dev->stream[RKISP1_STREAM_MP].state); + "SP streaming = %d, MP streaming = %d\n", + dev->stream[RKISP1_STREAM_SP].streaming, + dev->stream[RKISP1_STREAM_MP].streaming); /* * ISP(mi) stop in mi frame end -> Stop ISP(mipi) -> @@ -414,9 +414,9 @@ static int rkisp1_isp_stop(struct rkisp1_device *dev) readx_poll_timeout(readl, base + CIF_ISP_RIS, val, val & CIF_ISP_OFF, 20, 100); v4l2_dbg(1, rkisp1_debug, &dev->v4l2_dev, - "state(MP:%d, SP:%d), MI_CTRL:%x, ISP_CTRL:%x, MIPI_CTRL:%x\n", - dev->stream[RKISP1_STREAM_SP].state, - dev->stream[RKISP1_STREAM_MP].state, + "streaming(MP:%d, SP:%d), MI_CTRL:%x, ISP_CTRL:%x, MIPI_CTRL:%x\n", + dev->stream[RKISP1_STREAM_SP].streaming, + dev->stream[RKISP1_STREAM_MP].streaming, readl(base + CIF_MI_CTRL), readl(base + CIF_ISP_CTRL), readl(base + CIF_MIPI_CTRL)); @@ -435,9 +435,9 @@ static int rkisp1_isp_start(struct rkisp1_device *dev) u32 val; v4l2_dbg(1, rkisp1_debug, &dev->v4l2_dev, - "SP state = %d, MP state = %d\n", - dev->stream[RKISP1_STREAM_SP].state, - dev->stream[RKISP1_STREAM_MP].state); + "SP streaming = %d, MP streaming = %d\n", + dev->stream[RKISP1_STREAM_SP].streaming, + dev->stream[RKISP1_STREAM_MP].streaming); /* Activate MIPI */ if (sensor->mbus.type == V4L2_MBUS_CSI2) { @@ -457,10 +457,10 @@ static int rkisp1_isp_start(struct rkisp1_device *dev) usleep_range(1000, 1200); v4l2_dbg(1, rkisp1_debug, &dev->v4l2_dev, - "SP state = %d, MP state = %d MI_CTRL 0x%08x\n" + "SP streaming = %d, MP streaming = %d MI_CTRL 0x%08x\n" " ISP_CTRL 0x%08x MIPI_CTRL 0x%08x\n", - dev->stream[RKISP1_STREAM_SP].state, - dev->stream[RKISP1_STREAM_MP].state, + dev->stream[RKISP1_STREAM_SP].streaming, + dev->stream[RKISP1_STREAM_MP].streaming, readl(base + CIF_MI_CTRL), readl(base + CIF_ISP_CTRL), readl(base + CIF_MIPI_CTRL)); From d7102fcc0dc2ea0463c834a07c75aea735169813 Mon Sep 17 00:00:00 2001 From: Tomasz Figa Date: Mon, 21 May 2018 18:29:07 +0900 Subject: [PATCH 0043/1852] CHROMIUM: media: rockchip/isp1: Reverse the order of MIs The current order (SP=0, MP=1) is the opposite of what is there in hardware registers (MP=0, SP=1), which unnecessarily complicates the code that deals with hardware programming. Fix this by reversing the order of streams in the driver. BUG=b:78779539 TEST=Make sure camera works on scarlet. Change-Id: I43671748073d9dc4cb906e5f6f992f870920ce91 Signed-off-by: Tomasz Figa Reviewed-on: https://chromium-review.googlesource.com/1065403 Tested-by: yichong zhong Reviewed-by: Ricky Liang Reviewed-by: yichong zhong Reviewed-by: Alexandre Courbot --- drivers/media/platform/rockchip/isp1/common.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/common.h b/drivers/media/platform/rockchip/isp1/common.h index 0d78446fda288..5f212090b9a1e 100644 --- a/drivers/media/platform/rockchip/isp1/common.h +++ b/drivers/media/platform/rockchip/isp1/common.h @@ -46,8 +46,8 @@ #define RKISP1_DEFAULT_HEIGHT 600 #define RKISP1_MAX_STREAM 2 -#define RKISP1_STREAM_SP 0 -#define RKISP1_STREAM_MP 1 +#define RKISP1_STREAM_MP 0 +#define RKISP1_STREAM_SP 1 #define RKISP1_PLANE_Y 0 #define RKISP1_PLANE_CB 1 From 8648c3668074fa0e14b23fa1d98068e08ed2b435 Mon Sep 17 00:00:00 2001 From: Tomasz Figa Date: Mon, 21 May 2018 18:39:06 +0900 Subject: [PATCH 0044/1852] CHROMIUM: media: rockchip/isp1: Simplify MI interrupt handling Rather than adding unnecessary indirection, just use stream index to handle MI interrupt enable/disable/clear, since the stream index matches the order of bits now, thanks to previous patch. While at it, remove some dead code. BUG=b:78779539 TEST=Make sure camera works on scarlet. Change-Id: Ie817471972e60917250d7240d7543b516db0db03 Signed-off-by: Tomasz Figa Reviewed-on: https://chromium-review.googlesource.com/1065404 Reviewed-by: yichong zhong Reviewed-by: Alexandre Courbot --- .../media/platform/rockchip/isp1/capture.c | 67 ++++++++--------- .../media/platform/rockchip/isp1/capture.h | 6 +- drivers/media/platform/rockchip/isp1/dev.c | 12 +-- drivers/media/platform/rockchip/isp1/regs.c | 20 ----- drivers/media/platform/rockchip/isp1/regs.h | 75 +++++++------------ 5 files changed, 62 insertions(+), 118 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/capture.c b/drivers/media/platform/rockchip/isp1/capture.c index 116fcd1a998b1..00d9df43ecc68 100644 --- a/drivers/media/platform/rockchip/isp1/capture.c +++ b/drivers/media/platform/rockchip/isp1/capture.c @@ -759,7 +759,7 @@ static int mp_config_mi(struct rkisp1_stream *stream) mi_set_cb_size(stream, stream->out_fmt.plane_fmt[1].sizeimage); mi_set_cr_size(stream, stream->out_fmt.plane_fmt[2].sizeimage); - mp_frame_end_int_enable(base); + mi_frame_end_int_enable(stream); if (stream->out_isp_fmt.uv_swap) mp_set_uv_swap(base); @@ -800,7 +800,7 @@ static int sp_config_mi(struct rkisp1_stream *stream) sp_set_y_height(base, stream->out_fmt.height); sp_set_y_line_length(base, stream->u.sp.y_stride); - sp_frame_end_int_enable(base); + mi_frame_end_int_enable(stream); if (output_isp_fmt->uv_swap) sp_set_uv_swap(base); @@ -876,21 +876,17 @@ static void update_mi(struct rkisp1_stream *stream) static void mp_stop_mi(struct rkisp1_stream *stream) { - void __iomem *base = stream->ispdev->base_addr; - if (!stream->streaming) return; - stream->ops->clr_frame_end_int(base); + mi_frame_end_int_clear(stream); stream->ops->disable_mi(stream); } static void sp_stop_mi(struct rkisp1_stream *stream) { - void __iomem *base = stream->ispdev->base_addr; - if (!stream->streaming) return; - stream->ops->clr_frame_end_int(base); + mi_frame_end_int_clear(stream); stream->ops->disable_mi(stream); } @@ -900,8 +896,6 @@ static struct streams_ops rkisp1_mp_streams_ops = { .disable_mi = mp_disable_mi, .stop_mi = mp_stop_mi, .set_data_path = mp_set_data_path, - .clr_frame_end_int = mp_clr_frame_end_int, - .is_frame_end_int_masked = mp_is_frame_end_int_masked, .is_stream_stopped = mp_is_stream_stopped, }; @@ -911,8 +905,6 @@ static struct streams_ops rkisp1_sp_streams_ops = { .disable_mi = sp_disable_mi, .stop_mi = sp_stop_mi, .set_data_path = sp_set_data_path, - .clr_frame_end_int = sp_clr_frame_end_int, - .is_frame_end_int_masked = sp_is_frame_end_int_masked, .is_stream_stopped = sp_is_stream_stopped, }; @@ -1705,33 +1697,36 @@ int rkisp1_register_stream_vdevs(struct rkisp1_device *dev) /**************** Interrupter Handler ****************/ -void rkisp1_mi_isr(struct rkisp1_stream *stream) +void rkisp1_mi_isr(u32 mis_val, struct rkisp1_device *dev) { - struct rkisp1_device *dev = stream->ispdev; - void __iomem *base = stream->ispdev->base_addr; - u32 val; - - stream->ops->clr_frame_end_int(base); - if (stream->ops->is_frame_end_int_masked(base)) { - val = mi_get_masked_int_status(base); - v4l2_err(&dev->v4l2_dev, "icr err: 0x%x\n", val); - } + int i; - if (stream->stopping) { - /* Make sure stream is actually stopped, whose state - * can be read from the shadow register, before wake_up() - * thread which would immediately free all frame buffers. - * stop_mi() takes effect at the next frame end - * that sync the configurations to shadow regs. - */ - if (stream->ops->is_stream_stopped(dev->base_addr)) { - stream->stopping = false; - stream->streaming = false; - wake_up(&stream->done); + for (i = 0; i < ARRAY_SIZE(dev->stream); ++i) { + struct rkisp1_stream *stream = &dev->stream[i]; + + if (!(mis_val & CIF_MI_FRAME(stream))) + continue; + + mi_frame_end_int_clear(stream); + + if (stream->stopping) { + /* + * Make sure stream is actually stopped, whose state + * can be read from the shadow register, before + * wake_up() thread which would immediately free all + * frame buffers. stop_mi() takes effect at the next + * frame end that sync the configurations to shadow + * regs. + */ + if (stream->ops->is_stream_stopped(dev->base_addr)) { + stream->stopping = false; + stream->streaming = false; + wake_up(&stream->done); + } else { + stream->ops->stop_mi(stream); + } } else { - stream->ops->stop_mi(stream); + mi_frame_end(stream); } - } else { - mi_frame_end(stream); } } diff --git a/drivers/media/platform/rockchip/isp1/capture.h b/drivers/media/platform/rockchip/isp1/capture.h index 94e580272b298..6fadc3e306153 100644 --- a/drivers/media/platform/rockchip/isp1/capture.h +++ b/drivers/media/platform/rockchip/isp1/capture.h @@ -142,8 +142,6 @@ struct streams_ops { void (*enable_mi)(struct rkisp1_stream *stream); void (*disable_mi)(struct rkisp1_stream *stream); void (*set_data_path)(void __iomem *base); - void (*clr_frame_end_int)(void __iomem *base); - bool (*is_frame_end_int_masked)(void __iomem *base); bool (*is_stream_stopped)(void __iomem *base); }; @@ -163,7 +161,7 @@ struct streams_ops { * @next_buf: the buffer used for next frame */ struct rkisp1_stream { - u32 id; + unsigned id:1; struct rkisp1_device *ispdev; struct rkisp1_vdev_node vnode; struct capture_fmt out_isp_fmt; @@ -187,7 +185,7 @@ struct rkisp1_stream { void rkisp1_unregister_stream_vdevs(struct rkisp1_device *dev); int rkisp1_register_stream_vdevs(struct rkisp1_device *dev); -void rkisp1_mi_isr(struct rkisp1_stream *stream); +void rkisp1_mi_isr(u32 mis_val, struct rkisp1_device *dev); void rkisp1_stream_init(struct rkisp1_device *dev, u32 id); #endif /* _RKISP1_PATH_VIDEO_H */ diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c index c88534ef2a921..03c46cc243acd 100644 --- a/drivers/media/platform/rockchip/isp1/dev.c +++ b/drivers/media/platform/rockchip/isp1/dev.c @@ -490,8 +490,7 @@ static irqreturn_t rkisp1_irq_handler(int irq, void *ctx) { struct device *dev = ctx; struct rkisp1_device *rkisp1_dev = dev_get_drvdata(dev); - void __iomem *base = rkisp1_dev->base_addr; - unsigned int mis_val, i; + unsigned int mis_val; mis_val = readl(rkisp1_dev->base_addr + CIF_ISP_MIS); if (mis_val) @@ -501,12 +500,9 @@ static irqreturn_t rkisp1_irq_handler(int irq, void *ctx) if (mis_val) rkisp1_mipi_isr(mis_val, rkisp1_dev); - for (i = 0; i < RKISP1_MAX_STREAM; ++i) { - struct rkisp1_stream *stream = &rkisp1_dev->stream[i]; - - if (stream->ops->is_frame_end_int_masked(base)) - rkisp1_mi_isr(stream); - } + mis_val = readl(rkisp1_dev->base_addr + CIF_MI_MIS); + if (mis_val) + rkisp1_mi_isr(mis_val, rkisp1_dev); return IRQ_HANDLED; } diff --git a/drivers/media/platform/rockchip/isp1/regs.c b/drivers/media/platform/rockchip/isp1/regs.c index 2668db5fed12d..675c2d75c9b70 100644 --- a/drivers/media/platform/rockchip/isp1/regs.c +++ b/drivers/media/platform/rockchip/isp1/regs.c @@ -232,26 +232,6 @@ void config_mi_ctrl(struct rkisp1_stream *stream) writel(reg | CIF_MI_CTRL_INIT_OFFSET_EN, addr); } -void mp_clr_frame_end_int(void __iomem *base) -{ - writel(CIF_MI_MP_FRAME, base + CIF_MI_ICR); -} - -void sp_clr_frame_end_int(void __iomem *base) -{ - writel(CIF_MI_SP_FRAME, base + CIF_MI_ICR); -} - -bool mp_is_frame_end_int_masked(void __iomem *base) -{ - return (mi_get_masked_int_status(base) & CIF_MI_MP_FRAME); -} - -bool sp_is_frame_end_int_masked(void __iomem *base) -{ - return (mi_get_masked_int_status(base) & CIF_MI_SP_FRAME); -} - bool mp_is_stream_stopped(void __iomem *base) { int en; diff --git a/drivers/media/platform/rockchip/isp1/regs.h b/drivers/media/platform/rockchip/isp1/regs.h index f0dd59ed20ef5..b2495fa80ba7d 100644 --- a/drivers/media/platform/rockchip/isp1/regs.h +++ b/drivers/media/platform/rockchip/isp1/regs.h @@ -197,8 +197,7 @@ #define CIF_RSZ_SCALER_FACTOR BIT(16) /* MI_IMSC - MI_MIS - MI_RIS - MI_ICR - MI_ISR */ -#define CIF_MI_MP_FRAME BIT(0) -#define CIF_MI_SP_FRAME BIT(1) +#define CIF_MI_FRAME(stream) BIT((stream)->id) #define CIF_MI_MBLK_LINE BIT(2) #define CIF_MI_FILL_MP_Y BIT(3) #define CIF_MI_WRAP_MP_Y BIT(4) @@ -1376,6 +1375,30 @@ static inline void mi_set_cr_offset(struct rkisp1_stream *stream, int val) writel(val, base + stream->config->mi.cr_offs_cnt_init); } +static inline void mi_frame_end_int_enable(struct rkisp1_stream *stream) +{ + void __iomem *base = stream->ispdev->base_addr; + void __iomem *addr = base + CIF_MI_IMSC; + + writel(CIF_MI_FRAME(stream) | readl(addr), addr); +} + +static inline void mi_frame_end_int_disable(struct rkisp1_stream *stream) +{ + void __iomem *base = stream->ispdev->base_addr; + void __iomem *addr = base + CIF_MI_IMSC; + + writel(~CIF_MI_FRAME(stream) & readl(addr), addr); +} + +static inline void mi_frame_end_int_clear(struct rkisp1_stream *stream) +{ + void __iomem *base = stream->ispdev->base_addr; + void __iomem *addr = base + CIF_MI_ICR; + + writel(CIF_MI_FRAME(stream), addr); +} + static inline void mp_set_chain_mode(void __iomem *base) { u32 dpcl = readl(base + CIF_VI_DPCL); @@ -1408,49 +1431,6 @@ static inline void sp_set_data_path(void __iomem *base) writel(dpcl, base + CIF_VI_DPCL); } -static inline void mp_frame_end_int_enable(void __iomem *base) -{ - void __iomem *addr = base + CIF_MI_IMSC; - - writel(CIF_MI_MP_FRAME | readl(addr), addr); -} - -static inline void sp_frame_end_int_enable(void __iomem *base) -{ - void __iomem *addr = base + CIF_MI_IMSC; - - writel(CIF_MI_SP_FRAME | readl(addr), addr); -} - -static inline void mp_frame_end_int_disable(void __iomem *base) -{ - void __iomem *addr = base + CIF_MI_IMSC; - - writel(~CIF_MI_MP_FRAME & readl(addr), addr); -} - -static inline void sp_frame_end_int_disable(void __iomem *base) -{ - void __iomem *addr = base + CIF_MI_IMSC; - - writel(~CIF_MI_SP_FRAME & readl(addr), addr); -} - -static inline void clr_mpsp_frame_end_int(void __iomem *base) -{ - writel(CIF_MI_SP_FRAME | CIF_MI_MP_FRAME, base + CIF_MI_ICR); -} - -static inline void clr_mp_crop_rsz_int(void __iomem *base) -{ - writel(~CIF_MI_MP_FRAME, base + CIF_MI_ICR); -} - -static inline void clr_sp_crop_rsz_int(void __iomem *base) -{ - writel(~CIF_MI_SP_FRAME, base + CIF_MI_ICR); -} - static inline void mp_set_uv_swap(void __iomem *base) { void __iomem *addr = base + CIF_MI_XTD_FORMAT_CTRL; @@ -1572,9 +1552,4 @@ static inline void force_cfg_update(void __iomem *base) writel(CIF_MI_INIT_SOFT_UPD, base + CIF_MI_INIT); } -static inline u32 mi_get_masked_int_status(void __iomem *base) -{ - return readl(base + CIF_MI_MIS); -} - #endif /* _RKISP1_REGS_H */ From 18fa98845714a960c954b48d7af1f938f2590b24 Mon Sep 17 00:00:00 2001 From: ZhongYiChong Date: Thu, 1 Mar 2018 16:16:03 +0800 Subject: [PATCH 0045/1852] media: rockchip: isp1: Update new ISP parameters immediately For those sub modules that have shadow registers in core isp, the new programing parameters would not be active if both CIF_ISP_CTRL_ISP_CFG_UPD_PERMANENT and CFG_UPD are not set. Now we configure CFG_UPD to force update the shadow registers when new ISP parameters are configured. BUG=b:36227021 TEST=scarlet can preview, LSC data table can be switched. Change-Id: I804ddfc45b3c2fca9a6f51627af4264a25075070 Signed-off-by: ZhongYiChong Reviewed-on: https://chromium-review.googlesource.com/942721 Commit-Ready: Tomasz Figa Tested-by: Jeffy Chen Reviewed-by: Tomasz Figa --- drivers/media/platform/rockchip/isp1/isp_params.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/media/platform/rockchip/isp1/isp_params.c b/drivers/media/platform/rockchip/isp1/isp_params.c index 136e2393d714b..913402a4faa05 100644 --- a/drivers/media/platform/rockchip/isp1/isp_params.c +++ b/drivers/media/platform/rockchip/isp1/isp_params.c @@ -1189,8 +1189,16 @@ void rkisp1_params_isr(struct rkisp1_isp_params_vdev *params_vdev, u32 isp_mis) new_params = (struct rkisp1_isp_params_cfg *)(cur_buf->vaddr[0]); if (isp_mis & CIF_ISP_FRAME) { + u32 isp_ctrl; + __isp_isr_other_config(params_vdev, new_params); __isp_isr_meas_config(params_vdev, new_params); + + /* update shadow register immediately */ + isp_ctrl = rkisp1_ioread32(params_vdev, CIF_ISP_CTRL); + isp_ctrl |= CIF_ISP_CTRL_ISP_CFG_UPD; + rkisp1_iowrite32(params_vdev, isp_ctrl, CIF_ISP_CTRL); + spin_lock(¶ms_vdev->config_lock); list_del(&cur_buf->queue); spin_unlock(¶ms_vdev->config_lock); From 9a8add4c3dd36829577ab1dfc8c8f34defcc78ed Mon Sep 17 00:00:00 2001 From: ZhongYiChong Date: Tue, 29 May 2018 17:37:21 +0800 Subject: [PATCH 0046/1852] media: rockchip: isp1: fix some ISP parameters config error Some ISP parameter config functions may override the old enable bit value, because the enable bits of these modules are in the same registers with parameters. So we should save the old enable bits firstly. BUG=b:36227021 TEST=scarlet can preview Change-Id: I509e2b9160118f8a7f522857e013e3014e41ef9f Signed-off-by: ZhongYiChong --- .../media/platform/rockchip/isp1/isp_params.c | 63 ++++++++++++++----- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/isp_params.c b/drivers/media/platform/rockchip/isp1/isp_params.c index 913402a4faa05..84a1e7ffbfdea 100644 --- a/drivers/media/platform/rockchip/isp1/isp_params.c +++ b/drivers/media/platform/rockchip/isp1/isp_params.c @@ -97,8 +97,13 @@ static void dpcc_config(struct rkisp1_isp_params_vdev *params_vdev, const struct cifisp_dpcc_config *arg) { unsigned int i; + u32 mode; - rkisp1_iowrite32(params_vdev, arg->mode, CIF_ISP_DPCC_MODE); + /* avoid to override the old enable value */ + mode = rkisp1_ioread32(params_vdev, CIF_ISP_DPCC_MODE); + mode &= CIF_ISP_DPCC_ENA; + mode |= arg->mode & ~CIF_ISP_DPCC_ENA; + rkisp1_iowrite32(params_vdev, mode, CIF_ISP_DPCC_MODE); rkisp1_iowrite32(params_vdev, arg->output_mode, CIF_ISP_DPCC_OUTPUT_MODE); rkisp1_iowrite32(params_vdev, arg->set_use, CIF_ISP_DPCC_SET_USE); @@ -130,8 +135,11 @@ static void dpcc_config(struct rkisp1_isp_params_vdev *params_vdev, static void bls_config(struct rkisp1_isp_params_vdev *params_vdev, const struct cifisp_bls_config *arg) { - u32 new_control = 0; + /* avoid to override the old enable value */ + u32 new_control; + new_control = rkisp1_ioread32(params_vdev, CIF_ISP_BLS_CTRL); + new_control &= CIF_ISP_BLS_ENA; /* fixed subtraction values */ if (!arg->enable_auto) { const struct cifisp_bls_fixed_val *pval = &arg->fixed_val; @@ -181,7 +189,6 @@ static void bls_config(struct rkisp1_isp_params_vdev *params_vdev, break; } - new_control = CIF_ISP_BLS_MODE_FIXED; } else { if (arg->en_windows & BIT(1)) { rkisp1_iowrite32(params_vdev, arg->bls_window2.h_offs, @@ -336,7 +343,7 @@ static void lsc_config(struct rkisp1_isp_params_vdev *params_vdev, CIF_ISP_LSC_YGRAD_01 + i * 4); } - /* restore the bls ctrl status */ + /* restore the lsc ctrl status */ if (lsc_ctrl & CIF_ISP_LSC_CTRL_ENA) { isp_param_set_bits(params_vdev, CIF_ISP_LSC_CTRL, @@ -352,6 +359,8 @@ static void lsc_config(struct rkisp1_isp_params_vdev *params_vdev, static void flt_config(struct rkisp1_isp_params_vdev *params_vdev, const struct cifisp_flt_config *arg) { + u32 filt_mode; + rkisp1_iowrite32(params_vdev, arg->thresh_bl0, CIF_ISP_FILT_THRESH_BL0); rkisp1_iowrite32(params_vdev, arg->thresh_bl1, CIF_ISP_FILT_THRESH_BL1); rkisp1_iowrite32(params_vdev, arg->thresh_sh0, CIF_ISP_FILT_THRESH_SH0); @@ -368,14 +377,30 @@ static void flt_config(struct rkisp1_isp_params_vdev *params_vdev, CIF_ISP_FLT_CHROMA_H_MODE(arg->chr_h_mode) | CIF_ISP_FLT_GREEN_STAGE1(arg->grn_stage1), CIF_ISP_FILT_MODE); + + /* avoid to override the old enable value */ + filt_mode = rkisp1_ioread32(params_vdev, CIF_ISP_FILT_MODE); + filt_mode &= CIF_ISP_FLT_ENA; + if (arg->mode) + filt_mode |= CIF_ISP_FLT_MODE_DNR; + filt_mode |= CIF_ISP_FLT_CHROMA_V_MODE(arg->chr_v_mode) | + CIF_ISP_FLT_CHROMA_H_MODE(arg->chr_h_mode) | + CIF_ISP_FLT_GREEN_STAGE1(arg->grn_stage1); + rkisp1_iowrite32(params_vdev, filt_mode, CIF_ISP_FILT_MODE); } /* ISP demosaic interface function */ static int bdm_config(struct rkisp1_isp_params_vdev *params_vdev, const struct cifisp_bdm_config *arg) { + u32 bdm_th; + + /* avoid to override the old enable value */ + bdm_th = rkisp1_ioread32(params_vdev, CIF_ISP_DEMOSAIC); + bdm_th &= CIF_ISP_DEMOSAIC_BYPASS; + bdm_th |= arg->demosaic_th & ~CIF_ISP_DEMOSAIC_BYPASS; /* set demosaic threshold */ - rkisp1_iowrite32(params_vdev, arg->demosaic_th, CIF_ISP_DEMOSAIC); + rkisp1_iowrite32(params_vdev, bdm_th, CIF_ISP_DEMOSAIC); return 0; } @@ -538,11 +563,16 @@ static void aec_config(struct rkisp1_isp_params_vdev *params_vdev, const struct cifisp_aec_config *arg) { unsigned int block_hsize, block_vsize; + u32 exp_ctrl; - rkisp1_iowrite32(params_vdev, - ((arg->autostop) ? CIF_ISP_EXP_CTRL_AUTOSTOP : 0) | - ((arg->mode == CIFISP_EXP_MEASURING_MODE_1) ? - CIF_ISP_EXP_CTRL_MEASMODE_1 : 0), CIF_ISP_EXP_CTRL); + /* avoid to override the old enable value */ + exp_ctrl = rkisp1_ioread32(params_vdev, CIF_ISP_EXP_CTRL); + exp_ctrl &= CIF_ISP_EXP_ENA; + if (arg->autostop) + exp_ctrl |= CIF_ISP_EXP_CTRL_AUTOSTOP; + if (arg->mode == CIFISP_EXP_MEASURING_MODE_1) + exp_ctrl |= CIF_ISP_EXP_CTRL_MEASMODE_1; + rkisp1_iowrite32(params_vdev, exp_ctrl, CIF_ISP_EXP_CTRL); rkisp1_iowrite32(params_vdev, arg->meas_window.h_offs, CIF_ISP_EXP_H_OFFSET); @@ -597,10 +627,13 @@ static void hst_config(struct rkisp1_isp_params_vdev *params_vdev, }; int i; const u8 *weight; + u32 hist_prop; - rkisp1_iowrite32(params_vdev, - CIF_ISP_HIST_PREDIV_SET(arg->histogram_predivider), - CIF_ISP_HIST_PROP); + /* avoid to override the old enable value */ + hist_prop = rkisp1_ioread32(params_vdev, CIF_ISP_HIST_PROP); + hist_prop &= CIF_ISP_HIST_PROP_MODE_MASK; + hist_prop |= CIF_ISP_HIST_PREDIV_SET(arg->histogram_predivider); + rkisp1_iowrite32(params_vdev, hist_prop, CIF_ISP_HIST_PROP); rkisp1_iowrite32(params_vdev, arg->meas_window.h_offs, CIF_ISP_HIST_H_OFFS); @@ -642,8 +675,9 @@ static void afm_config(struct rkisp1_isp_params_vdev *params_vdev, int i; size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->afm_win), arg->num_afm_win); + u32 afm_ctrl = rkisp1_ioread32(params_vdev, CIF_ISP_AFM_CTRL); - /* Switch off to configure. Enabled during normal flow in frame isr. */ + /* Switch off to configure. */ isp_param_clear_bits(params_vdev, CIF_ISP_AFM_CTRL, CIF_ISP_AFM_ENA); for (i = 0; i < num_of_win; i++) { @@ -660,6 +694,8 @@ static void afm_config(struct rkisp1_isp_params_vdev *params_vdev, } rkisp1_iowrite32(params_vdev, arg->thres, CIF_ISP_AFM_THRES); rkisp1_iowrite32(params_vdev, arg->var_shift, CIF_ISP_AFM_VAR_SHIFT); + /* restore afm status */ + rkisp1_iowrite32(params_vdev, afm_ctrl, CIF_ISP_AFM_CTRL); } static void ie_config(struct rkisp1_isp_params_vdev *params_vdev, @@ -730,7 +766,6 @@ static void ie_enable(struct rkisp1_isp_params_vdev *params_vdev, bool en) isp_param_set_bits(params_vdev, CIF_IMG_EFF_CTRL, CIF_IMG_EFF_CTRL_CFG_UPD); } else { - /* Disable measurement */ isp_param_clear_bits(params_vdev, CIF_IMG_EFF_CTRL, CIF_IMG_EFF_CTRL_ENABLE); isp_param_clear_bits(params_vdev, CIF_ICCL, CIF_ICCL_IE_CLK); From d95585e99296d76cd68801cd94145efc8760e020 Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 24 Apr 2018 09:17:25 +0800 Subject: [PATCH 0047/1852] media: rockchip: phy: Support isp0 and isp1 in rk3399 run at the same time Change-Id: Iba0aee26ac8ec8df5047a07b2fa4c0e311d0329f Signed-off-by: Hu Kejun --- .../platform/rockchip/isp1/mipi_dphy_sy.c | 138 ++++++++++++++---- 1 file changed, 106 insertions(+), 32 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c b/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c index 72b1876cdd034..c76ad313e9fdf 100644 --- a/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c +++ b/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c @@ -65,6 +65,17 @@ #define RK3399_GRF_SOC_CON24 0x6260 #define RK3399_GRF_SOC_CON25 0x6264 #define RK3399_GRF_SOC_STATUS1 0xe2a4 +#define RK3399_GRF_IO_VSEL 0x0900 + +#define RK3288_PHY_TEST_CTRL0 0x30 +#define RK3288_PHY_TEST_CTRL1 0x34 +#define RK3288_PHY_SHUTDOWNZ 0x08 +#define RK3288_PHY_RSTZ 0x0c + +#define RK3399_PHY_TEST_CTRL0 0xb4 +#define RK3399_PHY_TEST_CTRL1 0xb8 +#define RK3399_PHY_SHUTDOWNZ 0xa0 +#define RK3399_PHY_RSTZ 0xa0 #define CLOCK_LANE_HS_RX_CONTROL 0x34 #define LANE0_HS_RX_CONTROL 0x44 @@ -86,11 +97,6 @@ /* * CSI HOST */ -#define CSIHOST_PHY_TEST_CTRL0 0x30 -#define CSIHOST_PHY_TEST_CTRL1 0x34 -#define CSIHOST_PHY_SHUTDOWNZ 0x08 -#define CSIHOST_DPHY_RSTZ 0x0c - #define PHY_TESTEN_ADDR (0x1 << 16) #define PHY_TESTEN_DATA (0x0 << 16) #define PHY_TESTCLK (0x1 << 1) @@ -148,6 +154,7 @@ enum dphy_reg_id { /* below is for rk3399 only */ GRF_DPHY_RX0_CLK_INV_SEL, GRF_DPHY_RX1_CLK_INV_SEL, + GRF_DPHY_TX1RX1_SRC_SEL, }; enum mipi_dphy_ctl_type { @@ -163,15 +170,29 @@ enum mipi_dphy_lane { MIPI_DPHY_LANE_DATA3 }; +enum txrx_reg_id { + TXRX_PHY_TEST_CTRL0 = 0, + TXRX_PHY_TEST_CTRL1, + TXRX_PHY_SHUTDOWNZ, + TXRX_PHY_RSTZ, +}; + struct dphy_reg { u32 offset; u32 mask; u32 shift; }; +struct txrx_reg { + u32 offset; +}; + #define PHY_REG(_offset, _width, _shift) \ { .offset = _offset, .mask = BIT(_width) - 1, .shift = _shift, } +#define TXRX_REG(_offset) \ + { .offset = _offset, } + static const struct dphy_reg rk3288_grf_dphy_regs[] = { [GRF_CON_DISABLE_ISP] = PHY_REG(RK3288_GRF_SOC_CON6, 1, 0), [GRF_CON_ISP_DPHY_SEL] = PHY_REG(RK3288_GRF_SOC_CON6, 1, 1), @@ -226,7 +247,7 @@ static const struct dphy_reg rk3399_grf_dphy_regs[] = { [GRF_DPHY_TX1RX1_FORCETXSTOPMODE] = PHY_REG(RK3399_GRF_SOC_CON23, 4, 8), [GRF_DPHY_TX1RX1_TURNDISABLE] = PHY_REG(RK3399_GRF_SOC_CON23, 4, 12), [GRF_DPHY_TX1RX1_TURNREQUEST] = PHY_REG(RK3399_GRF_SOC_CON24, 4, 0), - [GRF_DPHY_RX1_SRC_SEL] = PHY_REG(RK3399_GRF_SOC_CON24, 1, 4), + [GRF_DPHY_TX1RX1_SRC_SEL] = PHY_REG(RK3399_GRF_SOC_CON24, 1, 4), [GRF_DPHY_TX1RX1_BASEDIR] = PHY_REG(RK3399_GRF_SOC_CON24, 1, 5), [GRF_DPHY_TX1RX1_ENABLECLK] = PHY_REG(RK3399_GRF_SOC_CON24, 1, 6), [GRF_DPHY_TX1RX1_MASTERSLAVEZ] = PHY_REG(RK3399_GRF_SOC_CON24, 1, 7), @@ -235,6 +256,21 @@ static const struct dphy_reg rk3399_grf_dphy_regs[] = { [GRF_DPHY_RX0_TESTCLK] = PHY_REG(RK3399_GRF_SOC_CON25, 1, 9), [GRF_DPHY_RX0_TESTCLR] = PHY_REG(RK3399_GRF_SOC_CON25, 1, 10), [GRF_DPHY_RX0_TESTDOUT] = PHY_REG(RK3399_GRF_SOC_STATUS1, 8, 0), + [GRF_DVP_V18SEL] = PHY_REG(RK3399_GRF_IO_VSEL, 1, 1), +}; + +static const struct txrx_reg rk3288_txrx_regs[] = { + [TXRX_PHY_TEST_CTRL0] = TXRX_REG(RK3288_PHY_TEST_CTRL0), + [TXRX_PHY_TEST_CTRL1] = TXRX_REG(RK3288_PHY_TEST_CTRL1), + [TXRX_PHY_SHUTDOWNZ] = TXRX_REG(RK3288_PHY_SHUTDOWNZ), + [TXRX_PHY_RSTZ] = TXRX_REG(RK3288_PHY_RSTZ), +}; + +static const struct txrx_reg rk3399_txrx_regs[] = { + [TXRX_PHY_TEST_CTRL0] = TXRX_REG(RK3399_PHY_TEST_CTRL0), + [TXRX_PHY_TEST_CTRL1] = TXRX_REG(RK3399_PHY_TEST_CTRL1), + [TXRX_PHY_SHUTDOWNZ] = TXRX_REG(RK3399_PHY_SHUTDOWNZ), + [TXRX_PHY_RSTZ] = TXRX_REG(RK3399_PHY_RSTZ), }; struct hsfreq_range { @@ -249,8 +285,10 @@ struct dphy_drv_data { int num_clks; const struct hsfreq_range *hsfreq_ranges; int num_hsfreq_ranges; - const struct dphy_reg *regs; + const struct dphy_reg *grf_regs; + const struct txrx_reg *txrx_regs; enum mipi_dphy_ctl_type ctl_type; + void (*individual_init)(struct mipidphy_priv *priv); }; struct sensor_async_subdev { @@ -272,6 +310,7 @@ struct mipidphy_priv { struct device *dev; struct regmap *regmap_grf; const struct dphy_reg *grf_regs; + const struct txrx_reg *txrx_regs; void __iomem *csihost_base_addr; struct clk *clks[MAX_DPHY_CLK]; const struct dphy_drv_data *drv_data; @@ -297,8 +336,17 @@ static inline void write_grf_reg(struct mipidphy_priv *priv, const struct dphy_reg *reg = &priv->grf_regs[index]; unsigned int val = HIWORD_UPDATE(value, reg->mask, reg->shift); - WARN_ON(!reg->offset); - regmap_write(priv->regmap_grf, reg->offset, val); + if (reg->offset) + regmap_write(priv->regmap_grf, reg->offset, val); +} + +static inline void write_txrx_reg(struct mipidphy_priv *priv, + int index, u32 value) +{ + const struct txrx_reg *reg = &priv->txrx_regs[index]; + + if (reg->offset) + writel(value, priv->txrx_base_addr + reg->offset); } static void mipidphy0_wr_reg(struct mipidphy_priv *priv, @@ -327,12 +375,10 @@ static void mipidphy1_wr_reg(struct mipidphy_priv *priv, unsigned char addr, * TESTEN =0,TESTDIN=data * TESTCLK=1 */ - writel((PHY_TESTEN_ADDR | addr), - priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL1); - writel(0x00, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0); - writel((PHY_TESTEN_DATA | data), - priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL1); - writel(PHY_TESTCLK, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0); + write_txrx_reg(priv, TXRX_PHY_TEST_CTRL1, PHY_TESTEN_ADDR | addr); + write_txrx_reg(priv, TXRX_PHY_TEST_CTRL0, 0x00); + write_txrx_reg(priv, TXRX_PHY_TEST_CTRL1, PHY_TESTEN_DATA | data); + write_txrx_reg(priv, TXRX_PHY_TEST_CTRL0, 0x02); } static void csi_mipidphy_wr_ths_settle(struct mipidphy_priv *priv, int hsfreq, @@ -476,7 +522,8 @@ static int mipidphy_runtime_suspend(struct device *dev) num_clks = priv->drv_data->num_clks; for (i = num_clks - 1; i >= 0; i--) - clk_disable_unprepare(priv->clks[i]); + if (!IS_ERR(priv->clks[i])) + clk_disable_unprepare(priv->clks[i]); return 0; } @@ -490,9 +537,11 @@ static int mipidphy_runtime_resume(struct device *dev) num_clks = priv->drv_data->num_clks; for (i = 0; i < num_clks; i++) { - ret = clk_prepare_enable(priv->clks[i]); - if (ret < 0) - goto err; + if (!IS_ERR(priv->clks[i])) { + ret = clk_prepare_enable(priv->clks[i]); + if (ret < 0) + goto err; + } } return 0; @@ -581,8 +630,26 @@ static const char * const rk3399_mipidphy_clks[] = { "dphy-ref", "dphy-cfg", "grf", + "pclk_mipi_dsi", }; +static void default_mipidphy_individual_init(struct mipidphy_priv *priv) +{ +} + +static void rk3399_mipidphy_individual_init(struct mipidphy_priv *priv) +{ + /* + * According to the sequence of RK3399_TXRX_DPHY, the setting of isp0 mipi + * will affect txrx dphy in default state of grf_soc_con24. + */ + write_grf_reg(priv, GRF_DPHY_TX1RX1_SRC_SEL, 0); + write_grf_reg(priv, GRF_DPHY_TX1RX1_MASTERSLAVEZ, 0); + write_grf_reg(priv, GRF_DPHY_TX1RX1_BASEDIR, 0); + + write_grf_reg(priv, GRF_DVP_V18SEL, 0x1); +} + static int mipidphy_rx_stream_on(struct mipidphy_priv *priv, struct v4l2_subdev *sd) { @@ -655,6 +722,7 @@ static int mipidphy_txrx_stream_on(struct mipidphy_priv *priv, write_grf_reg(priv, GRF_CON_ISP_DPHY_SEL, 1); write_grf_reg(priv, GRF_DSI_CSI_TESTBUS_SEL, 1); write_grf_reg(priv, GRF_DPHY_RX1_SRC_SEL, 1); + write_grf_reg(priv, GRF_DPHY_TX1RX1_SRC_SEL, 0); write_grf_reg(priv, GRF_DPHY_TX1RX1_MASTERSLAVEZ, 0); write_grf_reg(priv, GRF_DPHY_TX1RX1_BASEDIR, 1); /* Disable lan turn around, which is ignored in receive mode */ @@ -665,12 +733,12 @@ static int mipidphy_txrx_stream_on(struct mipidphy_priv *priv, write_grf_reg(priv, GRF_DPHY_TX1RX1_ENABLE, GENMASK(sensor->lanes - 1, 0)); /* dphy start */ - writel(0, priv->txrx_base_addr + CSIHOST_PHY_SHUTDOWNZ); - writel(0, priv->txrx_base_addr + CSIHOST_DPHY_RSTZ); - writel(PHY_TESTCLK, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0); - writel(PHY_TESTCLR, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0); + write_txrx_reg(priv, TXRX_PHY_SHUTDOWNZ, 0x00); + write_txrx_reg(priv, TXRX_PHY_RSTZ, 0x00); + write_txrx_reg(priv, TXRX_PHY_TEST_CTRL0, PHY_TESTCLK); + write_txrx_reg(priv, TXRX_PHY_TEST_CTRL0, PHY_TESTCLR); usleep_range(100, 150); - writel(PHY_TESTCLK, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0); + write_txrx_reg(priv, TXRX_PHY_TEST_CTRL0, PHY_TESTCLK); usleep_range(100, 150); /* set clock lane */ @@ -750,8 +818,11 @@ static const struct dphy_drv_data rk3288_mipidphy_drv_data = { .num_clks = ARRAY_SIZE(rk3288_mipidphy_clks), .hsfreq_ranges = rk3288_mipidphy_hsfreq_ranges, .num_hsfreq_ranges = ARRAY_SIZE(rk3288_mipidphy_hsfreq_ranges), - .regs = rk3288_grf_dphy_regs, + .grf_regs = rk3288_grf_dphy_regs, + .txrx_regs = rk3288_txrx_regs, .ctl_type = MIPI_DPHY_CTL_GRF_ONLY, + .individual_init = default_mipidphy_individual_init, + }; static const struct dphy_drv_data rk3326_mipidphy_drv_data = { @@ -759,8 +830,9 @@ static const struct dphy_drv_data rk3326_mipidphy_drv_data = { .num_clks = ARRAY_SIZE(rk3326_mipidphy_clks), .hsfreq_ranges = rk3326_mipidphy_hsfreq_ranges, .num_hsfreq_ranges = ARRAY_SIZE(rk3326_mipidphy_hsfreq_ranges), - .regs = rk3326_grf_dphy_regs, + .grf_regs = rk3326_grf_dphy_regs, .ctl_type = MIPI_DPHY_CTL_CSI_HOST, + .individual_init = default_mipidphy_individual_init, }; static const struct dphy_drv_data rk3399_mipidphy_drv_data = { @@ -768,8 +840,10 @@ static const struct dphy_drv_data rk3399_mipidphy_drv_data = { .num_clks = ARRAY_SIZE(rk3399_mipidphy_clks), .hsfreq_ranges = rk3399_mipidphy_hsfreq_ranges, .num_hsfreq_ranges = ARRAY_SIZE(rk3399_mipidphy_hsfreq_ranges), - .regs = rk3399_grf_dphy_regs, + .grf_regs = rk3399_grf_dphy_regs, + .txrx_regs = rk3399_txrx_regs, .ctl_type = MIPI_DPHY_CTL_GRF_ONLY, + .individual_init = rk3399_mipidphy_individual_init, }; static const struct of_device_id rockchip_mipidphy_match_id[] = { @@ -972,13 +1046,12 @@ static int rockchip_mipidphy_probe(struct platform_device *pdev) for (i = 0; i < drv_data->num_clks; i++) { priv->clks[i] = devm_clk_get(dev, drv_data->clks[i]); - if (IS_ERR(priv->clks[i])) { - dev_err(dev, "Failed to get %s\n", drv_data->clks[i]); - return PTR_ERR(priv->clks[i]); - } + if (IS_ERR(priv->clks[i])) + dev_dbg(dev, "Failed to get %s\n", drv_data->clks[i]); } - priv->grf_regs = drv_data->regs; + priv->grf_regs = drv_data->grf_regs; + priv->txrx_regs = drv_data->txrx_regs; priv->drv_data = drv_data; if (drv_data->ctl_type == MIPI_DPHY_CTL_CSI_HOST) { res = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -1006,6 +1079,7 @@ static int rockchip_mipidphy_probe(struct platform_device *pdev) return ret; pm_runtime_enable(&pdev->dev); + drv_data->individual_init(priv); return 0; } From d6112be66daa84eb0d64725269f048ca766c1aeb Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 24 Apr 2018 11:54:51 +0800 Subject: [PATCH 0048/1852] arm64: dts: rockchip: rk3399-sapphire-excavator: isp0 and isp1 run at the same time Change-Id: I320462c815699725625dbf6752b4ae482b367a4a Signed-off-by: Hu Kejun --- .../rk3399-sapphire-excavator-edp.dts | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts index 728b430079c08..98b6f352de776 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts @@ -193,6 +193,51 @@ pinctrl-0 = <&hdmiin_gpios>; status = "okay"; }; + + ov13850: ov13850@10 { + compatible = "ovti,ov13850"; + status = "disabled"; + reg = <0x10>; + clocks = <&cru SCLK_CIF_OUT>; + clock-names = "xvclk"; + /* avdd-supply = <>; */ + /* dvdd-supply = <>; */ + /* dovdd-supply = <>; */ + /* reset-gpios = <>; */ + reset-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; // conflict with csi-ctl-gpios + pwdn-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>; + pinctrl-names = "rockchip,camera_default"; + pinctrl-0 = <&cif_clkout>; + port { + ucam_out0: endpoint { + remote-endpoint = <&mipi_in_ucam0>; + //remote-endpoint = <&mipi_in_ucam1>; + data-lanes = <1 2>; + }; + }; + }; + + ov4689: ov4689@36 { + compatible = "ovti,ov4689"; + status = "disabled"; + reg = <0x36>; + clocks = <&cru SCLK_CIF_OUT>; + clock-names = "xvclk"; + /* avdd-supply = <>; */ + /* dvdd-supply = <>; */ + /* dovdd-supply = <>; */ + /* reset-gpios = <>; */ + pwdn-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>; // conflict with backlight + pinctrl-names = "rockchip,camera_default"; + pinctrl-0 = <&cif_clkout>; + port { + ucam_out1: endpoint { + //remote-endpoint = <&mipi_in_ucam0>; + remote-endpoint = <&mipi_in_ucam1>; + data-lanes = <1 2>; + }; + }; + }; }; &i2c6 { @@ -229,6 +274,70 @@ status = "okay"; }; +&mipi_dphy_rx0 { + status = "disabled"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + #address-cells = <1>; + #size-cells = <0>; + + mipi_in_ucam0: endpoint@1 { + reg = <1>; + remote-endpoint = <&ucam_out0>; + data-lanes = <1 2>; + }; + }; + + port@1 { + reg = <1>; + #address-cells = <1>; + #size-cells = <0>; + + dphy_rx0_out: endpoint@0 { + reg = <0>; + remote-endpoint = <&isp0_mipi_in>; + }; + }; + }; +}; + +&mipi_dphy_tx1rx1 { + status = "disabled"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + #address-cells = <1>; + #size-cells = <0>; + + mipi_in_ucam1: endpoint@1 { + reg = <1>; + remote-endpoint = <&ucam_out1>; + data-lanes = <1 2>; + }; + }; + + port@1 { + reg = <1>; + #address-cells = <1>; + #size-cells = <0>; + + dphy_tx1rx1_out: endpoint@0 { + reg = <0>; + remote-endpoint = <&isp1_mipi_in>; + }; + }; + }; +}; + &vopb { assigned-clocks = <&cru DCLK_VOP0_DIV>; assigned-clock-parents = <&cru PLL_CPLL>; @@ -247,6 +356,34 @@ status = "okay"; }; +&rkisp1_0 { + status = "disabled"; + + port { + #address-cells = <1>; + #size-cells = <0>; + + isp0_mipi_in: endpoint@0 { + reg = <0>; + remote-endpoint = <&dphy_rx0_out>; + }; + }; +}; + +&rkisp1_1 { + status = "disabled"; + + port { + #address-cells = <1>; + #size-cells = <0>; + + isp1_mipi_in: endpoint@0 { + reg = <0>; + remote-endpoint = <&dphy_tx1rx1_out>; + }; + }; +}; + &route_edp { status = "okay"; }; From 6522127d551233149c04173d7b8ce89f97959106 Mon Sep 17 00:00:00 2001 From: ZhongYiChong Date: Thu, 1 Mar 2018 16:07:39 +0800 Subject: [PATCH 0049/1852] media: rockchip: isp1: fix config lsc error LSC data table size is 17x17, but when configuring data to ISP, should be aligned to 18x17. That means every last data of last line should be filled with 0, and not filled with the data of next line. BUG=b:36227021 TEST=scarlet can preview. Change-Id: I5e923529429a1c60efff3827e594f32db7112c1f Signed-off-by: ZhongYiChong Reviewed-on: https://chromium-review.googlesource.com/942600 Commit-Ready: Jeffy Chen Tested-by: Jeffy Chen Reviewed-by: Tomasz Figa --- .../media/platform/rockchip/isp1/isp_params.c | 24 +++++++++---------- drivers/media/platform/rockchip/isp1/regs.h | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/isp_params.c b/drivers/media/platform/rockchip/isp1/isp_params.c index 84a1e7ffbfdea..0bb564513f443 100644 --- a/drivers/media/platform/rockchip/isp1/isp_params.c +++ b/drivers/media/platform/rockchip/isp1/isp_params.c @@ -243,14 +243,13 @@ __lsc_correct_matrix_config(struct rkisp1_isp_params_vdev *params_vdev, rkisp1_iowrite32(params_vdev, sram_addr, CIF_ISP_LSC_B_TABLE_ADDR); /* program data tables (table size is 9 * 17 = 153) */ - for (i = 0; i < ((CIF_ISP_LSC_SECTORS_MAX + 1) * - (CIF_ISP_LSC_SECTORS_MAX + 1)); - i += CIF_ISP_LSC_SECTORS_MAX + 1) { + for (i = 0; i < CIF_ISP_LSC_SECTORS_MAX * CIF_ISP_LSC_SECTORS_MAX; + i += CIF_ISP_LSC_SECTORS_MAX) { /* * 17 sectors with 2 values in one DWORD = 9 * DWORDs (2nd value of last DWORD unused) */ - for (j = 0; j < (CIF_ISP_LSC_SECTORS_MAX); j += 2) { + for (j = 0; j < CIF_ISP_LSC_SECTORS_MAX - 1; j += 2) { data = CIF_ISP_LSC_TABLE_DATA( pconfig->r_data_tbl[i + j], pconfig->r_data_tbl[i + j + 1]); @@ -275,29 +274,30 @@ __lsc_correct_matrix_config(struct rkisp1_isp_params_vdev *params_vdev, rkisp1_iowrite32(params_vdev, data, CIF_ISP_LSC_B_TABLE_DATA); } + data = CIF_ISP_LSC_TABLE_DATA( - pconfig->r_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + pconfig->r_data_tbl[i + j], 0); rkisp1_iowrite32(params_vdev, data, - CIF_ISP_LSC_R_TABLE_DATA); + CIF_ISP_LSC_R_TABLE_DATA); data = CIF_ISP_LSC_TABLE_DATA( - pconfig->gr_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + pconfig->gr_data_tbl[i + j], 0); rkisp1_iowrite32(params_vdev, data, - CIF_ISP_LSC_GR_TABLE_DATA); + CIF_ISP_LSC_GR_TABLE_DATA); data = CIF_ISP_LSC_TABLE_DATA( - pconfig->gb_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + pconfig->gb_data_tbl[i + j], 0); rkisp1_iowrite32(params_vdev, data, - CIF_ISP_LSC_GB_TABLE_DATA); + CIF_ISP_LSC_GB_TABLE_DATA); data = CIF_ISP_LSC_TABLE_DATA( - pconfig->b_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + pconfig->b_data_tbl[i + j], 0); rkisp1_iowrite32(params_vdev, data, - CIF_ISP_LSC_B_TABLE_DATA); + CIF_ISP_LSC_B_TABLE_DATA); } isp_lsc_table_sel = (isp_lsc_status & CIF_ISP_LSC_ACTIVE_TABLE) ? CIF_ISP_LSC_TABLE_0 : CIF_ISP_LSC_TABLE_1; diff --git a/drivers/media/platform/rockchip/isp1/regs.h b/drivers/media/platform/rockchip/isp1/regs.h index b2495fa80ba7d..53977bc7e8795 100644 --- a/drivers/media/platform/rockchip/isp1/regs.h +++ b/drivers/media/platform/rockchip/isp1/regs.h @@ -504,7 +504,7 @@ #define CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00 #define CIF_ISP_LSC_GRAD_RESERVED 0xF000F000 #define CIF_ISP_LSC_SAMPLE_RESERVED 0xF000F000 -#define CIF_ISP_LSC_SECTORS_MAX 16 +#define CIF_ISP_LSC_SECTORS_MAX 17 #define CIF_ISP_LSC_TABLE_DATA(v0, v1) \ (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12)) #define CIF_ISP_LSC_SECT_SIZE(v0, v1) \ From 0680711e21a65671f9dd3e0d0fa9d5942f79ef97 Mon Sep 17 00:00:00 2001 From: Lin Jianhua Date: Tue, 3 Jul 2018 17:07:47 +0800 Subject: [PATCH 0050/1852] arm: dts: rockchip: rk3308-voice-module: config vad Change-Id: I764b5fe657a503d4a0efd12920054932c8b61dcf Signed-off-by: Lin Jianhua --- .../rk3308-voice-module-board-v10-aarch32.dts | 9 +-------- ...08-voice-module-mainboard-v10-aarch32.dtsi | 9 +-------- .../dts/rk3308-voice-module-v10-aarch32.dtsi | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/arch/arm/boot/dts/rk3308-voice-module-board-v10-aarch32.dts b/arch/arm/boot/dts/rk3308-voice-module-board-v10-aarch32.dts index f80efd24bdbd2..2efd960abf4b1 100644 --- a/arch/arm/boot/dts/rk3308-voice-module-board-v10-aarch32.dts +++ b/arch/arm/boot/dts/rk3308-voice-module-board-v10-aarch32.dts @@ -24,14 +24,7 @@ &acodec { status = "okay"; - + rockchip,no-deep-low-power; /* ADC5-6 for 2ch capture, loopback to ADC3-4 */ rockchip,adc-grps-route = <2 1 3 0>; }; - -&vad { - status = "disabled"; - rockchip,audio-src = <&i2s_8ch_2>; - rockchip,mode = <1>; - #sound-dai-cells = <0>; -}; diff --git a/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi b/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi index 1953d3ff68d5b..85e11b26617a6 100644 --- a/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi +++ b/arch/arm/boot/dts/rk3308-voice-module-mainboard-v10-aarch32.dtsi @@ -36,7 +36,7 @@ &acodec { status = "okay"; - + rockchip,no-deep-low-power; /* ADC3-6 for 4ch capture, loopback to ADC7 */ rockchip,adc-grps-route = <1 2 3 0>; }; @@ -402,10 +402,3 @@ pinctrl-0 = <&uart4_xfer &uart4_cts>; status = "okay"; }; - -&vad { - status = "disabled"; - rockchip,audio-src = <&i2s_8ch_2>; - rockchip,mode = <1>; - #sound-dai-cells = <0>; -}; diff --git a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi index cfb74991e6e13..1a9fada7de48f 100644 --- a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi +++ b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi @@ -94,6 +94,7 @@ rockchip,mclk-fs = <256>; rockchip,cpu = <&i2s_8ch_2>; rockchip,codec = <&acodec>; + status = "disabled"; }; spdif_tx_sound: spdif-tx-sound { @@ -108,6 +109,15 @@ }; }; + vad-sound { + status = "okay"; + compatible = "rockchip,multicodecs-card"; + rockchip,card-name = "rockchip,rk3308-vad"; + rockchip,codec-hp-det; + rockchip,cpu = <&i2s_8ch_2>; + rockchip,codec = <&acodec>, <&vad>; + }; + vdd_log: vdd_core: vdd-core { compatible = "pwm-regulator"; pwms = <&pwm0 0 5000 1>; @@ -320,3 +330,12 @@ &usb_host0_ohci{ status = "okay"; }; + +&vad { + status = "okay"; + rockchip,audio-src = <&i2s_8ch_2>; + rockchip,det-channel = <0>; + rockchip,mode = <1>; + rockchip,buffer-time-ms = <500>; + #sound-dai-cells = <0>; +}; From eab02705c988d77d5e1f95e94a3e98435895aef3 Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Wed, 4 Jul 2018 11:52:23 +0800 Subject: [PATCH 0051/1852] ASoC: rk3308_codec: add loopback handle delay property It may take different time for different PAs(AMPs) to open, so the delay we need in loopback needs to be flexible. Change-Id: I76c98b769e382cef08a6e897bb1d527783660f3b Signed-off-by: Xing Zheng --- sound/soc/codecs/rk3308_codec.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c index 2ae3d2a911023..3154bbf6a62f6 100644 --- a/sound/soc/codecs/rk3308_codec.c +++ b/sound/soc/codecs/rk3308_codec.c @@ -143,6 +143,7 @@ struct rk3308_codec_priv { u32 loopback_grp; u32 i2s_sdis[ADC_LR_GROUP_MAX]; u32 to_i2s_grps; + u32 delay_loopback_handle_ms; int which_i2s; int irq; int adc_grp0_using_linein; @@ -2765,7 +2766,7 @@ static int rk3308_pcm_trigger(struct snd_pcm_substream *substream, if (capture_str->substream_opened) queue_delayed_work(system_power_efficient_wq, &rk3308->loopback_work, - msecs_to_jiffies(LOOPBACK_HANDLE_MS)); + msecs_to_jiffies(rk3308->delay_loopback_handle_ms)); } else if (cmd == SNDRV_PCM_TRIGGER_STOP) { /* * Switch to dummy bist mode to kick the glitch during disable @@ -3674,6 +3675,10 @@ static int rk3308_platform_probe(struct platform_device *pdev) rk3308->no_deep_low_power = of_property_read_bool(np, "rockchip,no-deep-low-power"); + rk3308->delay_loopback_handle_ms = LOOPBACK_HANDLE_MS; + ret = of_property_read_u32(np, "rockchip,delay-loopback-handle-ms", + &rk3308->delay_loopback_handle_ms); + rk3308->loopback_grp = LOOPBACK_NO_USE; ret = of_property_read_u32(np, "rockchip,loopback-grp", &rk3308->loopback_grp); From 5c7ebcb400bd7d2c9f941b33c897851f7b4016bd Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Wed, 4 Jul 2018 12:02:17 +0800 Subject: [PATCH 0052/1852] ASoC: rk3308_codec: add property 'rockchip,delay-loopback-handle-ms' Change-Id: Icf9384f15ccedee3f3c039cc55b506381712caae Signed-off-by: Xing Zheng --- .../devicetree/bindings/sound/rockchip,rk3308-codec.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt b/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt index fbd3049d74c90..cea636a29d476 100644 --- a/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt +++ b/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt @@ -38,6 +38,8 @@ Optional properties: You need to add the property on dts: - rockchip,adc-grps-route = <3 0 2 1>; +- rockchip,delay-loopback-handle-ms: This property points out that the delay for + handling ADC after enable PAs during loopback. - rockchip,loopback-grp: It points out the ADC group which is the loopback used. - rockchip,no-deep-low-power: The codec will not enter deep low power mode during suspend. From 2cd1b7c3e88a039664a7a508ec1e1047142edd10 Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Wed, 4 Jul 2018 20:34:18 +0800 Subject: [PATCH 0053/1852] ASoC: rk3308_codec: add support 'rockchip,no-hp-det' property Fix the incorrect switching LINEOUT to HPOUT if there isn't no headphone and hp-det pin is hanging. Change-Id: I902ce3e112049981300f786cefa247bd166e1c33 Signed-off-by: Xing Zheng --- sound/soc/codecs/rk3308_codec.c | 43 ++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c index 3154bbf6a62f6..77897f00196ef 100644 --- a/sound/soc/codecs/rk3308_codec.c +++ b/sound/soc/codecs/rk3308_codec.c @@ -163,6 +163,7 @@ struct rk3308_codec_priv { bool hp_plugged; bool loopback_dacs_enabled; bool no_deep_low_power; + bool no_hp_det; struct delayed_work hpdet_work; struct delayed_work loopback_work; @@ -2974,7 +2975,8 @@ static int rk3308_probe(struct snd_soc_codec *codec) rk3308_codec_micbias_enable(rk3308, RK3308_ADC_MICBIAS_VOLT_0_85); rk3308_codec_prepare(rk3308); - rk3308_codec_headset_detect_enable(rk3308); + if (!rk3308->no_hp_det) + rk3308_codec_headset_detect_enable(rk3308); regcache_cache_only(rk3308->regmap, false); regcache_sync(rk3308->regmap); @@ -2988,7 +2990,8 @@ static int rk3308_remove(struct snd_soc_codec *codec) rk3308_headphone_ctl(rk3308, 0); rk3308_speaker_ctl(rk3308, 0); - rk3308_codec_headset_detect_disable(rk3308); + if (!rk3308->no_hp_det) + rk3308_codec_headset_detect_disable(rk3308); rk3308_codec_micbias_disable(rk3308); rk3308_codec_power_off(rk3308); @@ -3675,6 +3678,9 @@ static int rk3308_platform_probe(struct platform_device *pdev) rk3308->no_deep_low_power = of_property_read_bool(np, "rockchip,no-deep-low-power"); + rk3308->no_hp_det = + of_property_read_bool(np, "rockchip,no-hp-det"); + rk3308->delay_loopback_handle_ms = LOOPBACK_HANDLE_MS; ret = of_property_read_u32(np, "rockchip,delay-loopback-handle-ms", &rk3308->delay_loopback_handle_ms); @@ -3715,25 +3721,28 @@ static int rk3308_platform_probe(struct platform_device *pdev) goto failed; } - rk3308->irq = platform_get_irq(pdev, 0); - if (rk3308->irq < 0) { - dev_err(&pdev->dev, "Can not get codec irq\n"); - goto failed; - } + if (!rk3308->no_hp_det) { + rk3308->irq = platform_get_irq(pdev, 0); + if (rk3308->irq < 0) { + dev_err(&pdev->dev, "Can not get codec irq\n"); + goto failed; + } - INIT_DELAYED_WORK(&rk3308->hpdet_work, rk3308_codec_hpdetect_work); - INIT_DELAYED_WORK(&rk3308->loopback_work, rk3308_codec_loopback_work); + INIT_DELAYED_WORK(&rk3308->hpdet_work, rk3308_codec_hpdetect_work); - ret = devm_request_irq(&pdev->dev, rk3308->irq, - rk3308_codec_hpdet_isr, - 0, - "acodec-hpdet", - rk3308); - if (ret < 0) { - dev_err(&pdev->dev, "Failed to request IRQ: %d\n", ret); - goto failed; + ret = devm_request_irq(&pdev->dev, rk3308->irq, + rk3308_codec_hpdet_isr, + 0, + "acodec-hpdet", + rk3308); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to request IRQ: %d\n", ret); + goto failed; + } } + INIT_DELAYED_WORK(&rk3308->loopback_work, rk3308_codec_loopback_work); + rk3308->adc_grp0_using_linein = ADC_GRP0_MICIN; rk3308->dac_output = DAC_LINEOUT; rk3308->adc_zerocross = 1; From bf0a4cf88f2eabc03ddf4bdb836b26a380a9a79b Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Wed, 4 Jul 2018 20:41:48 +0800 Subject: [PATCH 0054/1852] ASoC: rk3308_codec: add 'rockchip,no-hp-det' property Change-Id: Ief8c0e7f5fcd21cdc7d115bbcca4eeb7050a373d Signed-off-by: Xing Zheng --- .../devicetree/bindings/sound/rockchip,rk3308-codec.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt b/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt index cea636a29d476..b04be9ac11197 100644 --- a/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt +++ b/Documentation/devicetree/bindings/sound/rockchip,rk3308-codec.txt @@ -43,6 +43,8 @@ Optional properties: - rockchip,loopback-grp: It points out the ADC group which is the loopback used. - rockchip,no-deep-low-power: The codec will not enter deep low power mode during suspend. +- rockchip,no-hp-det: If there is no headphone on boards, we don't need to + enable headphone detection. - hp-ctl-gpios: The gpio of head phone controller. - spk-ctl-gpios: The gpio of speak controller. From 6d2b656bbf9f7ab51d2a247307189dc4ccaa2e2f Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Wed, 4 Jul 2018 20:38:00 +0800 Subject: [PATCH 0055/1852] ARM: dts: rockchip: enable 'rockchip,no-hp-det' for rk3308 voice modules There isn't headphone on all of rk3308 voice modules, so we don't need to enable headphone detection. Change-Id: I526dc02dfb3c0b92503c8a7821baa82b87c8c996 Signed-off-by: Xing Zheng --- arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi index 1a9fada7de48f..ef8c465376931 100644 --- a/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi +++ b/arch/arm/boot/dts/rk3308-voice-module-v10-aarch32.dtsi @@ -181,6 +181,7 @@ &acodec { status = "disabled"; + rockchip,no-hp-det; rockchip,loopback-grp = <1>; spk-ctl-gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>; }; From 5ba390b2e440f9da933c34cf75a5f925b749208b Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Tue, 8 Aug 2017 08:56:23 -0400 Subject: [PATCH 0056/1852] UPSTREAM: media: uvcvideo: Convert from using an atomic variable to a reference count When adding support for metadata nodes, we'll have to keep video devices registered until all metadata nodes are closed too. Since this has nothing to do with stream counting, replace the nstreams atomic variable with a reference counter. Change-Id: Ied4c660b0cc618f010e4fffc3c3e06a2f71f4aa7 Signed-off-by: Guennadi Liakhovetski Reviewed-by: Laurent Pinchart Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 9d15cd958c172c8b02da6ee28638ccbbf7933175) --- drivers/media/usb/uvc/uvc_driver.c | 25 +++++++++---------------- drivers/media/usb/uvc/uvcvideo.h | 2 +- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index d7acd1245dfbb..8b6dcaebc0f36 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1768,8 +1768,9 @@ static int uvc_scan_device(struct uvc_device *dev) * already been canceled by the USB core. There is no need to kill the * interrupt URB manually. */ -static void uvc_delete(struct uvc_device *dev) +static void uvc_delete(struct kref *kref) { + struct uvc_device *dev = container_of(kref, struct uvc_device, ref); struct list_head *p, *n; uvc_status_cleanup(dev); @@ -1819,11 +1820,7 @@ static void uvc_release(struct video_device *vdev) struct uvc_streaming *stream = video_get_drvdata(vdev); struct uvc_device *dev = stream->dev; - /* Decrement the registered streams count and delete the device when it - * reaches zero. - */ - if (atomic_dec_and_test(&dev->nstreams)) - uvc_delete(dev); + kref_put(&dev->ref, uvc_delete); } /* @@ -1835,10 +1832,10 @@ static void uvc_unregister_video(struct uvc_device *dev) /* Unregistering all video devices might result in uvc_delete() being * called from inside the loop if there's no open file handle. To avoid - * that, increment the stream count before iterating over the streams - * and decrement it when done. + * that, increment the refcount before iterating over the streams and + * decrement it when done. */ - atomic_inc(&dev->nstreams); + kref_get(&dev->ref); list_for_each_entry(stream, &dev->streams, list) { if (!video_is_registered(&stream->vdev)) @@ -1849,11 +1846,7 @@ static void uvc_unregister_video(struct uvc_device *dev) uvc_debugfs_cleanup_stream(stream); } - /* Decrement the stream count and call uvc_delete explicitly if there - * are no stream left. - */ - if (atomic_dec_and_test(&dev->nstreams)) - uvc_delete(dev); + kref_put(&dev->ref, uvc_delete); } static int uvc_register_video(struct uvc_device *dev, @@ -1911,7 +1904,7 @@ static int uvc_register_video(struct uvc_device *dev, else stream->chain->caps |= V4L2_CAP_VIDEO_OUTPUT; - atomic_inc(&dev->nstreams); + kref_get(&dev->ref); return 0; } @@ -1995,7 +1988,7 @@ static int uvc_probe(struct usb_interface *intf, INIT_LIST_HEAD(&dev->entities); INIT_LIST_HEAD(&dev->chains); INIT_LIST_HEAD(&dev->streams); - atomic_set(&dev->nstreams, 0); + kref_init(&dev->ref); atomic_set(&dev->nmappings, 0); mutex_init(&dev->lock); diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 7e4d3eea371b6..a20e5aa7c7251 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -554,7 +554,7 @@ struct uvc_device { /* Video Streaming interfaces */ struct list_head streams; - atomic_t nstreams; + struct kref ref; /* Status Interrupt Endpoint */ struct usb_host_endpoint *int_ep; From d13049a2ae83038ed60853bf8b6bc8a8acb0a0eb Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Tue, 8 Aug 2017 08:56:24 -0400 Subject: [PATCH 0057/1852] UPSTREAM: media: uvcvideo: Constify video_subdev structures uvc_subdev_ops is only passed as the second argument of v4l2_subdev_init, which is const, so uvc_subdev_ops can be const as well. Done with the help of Coccinelle. Change-Id: Ic146384e5570ad6d249e661a73138ad396c6e3a6 Signed-off-by: Julia Lawall Reviewed-by: Laurent Pinchart Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 54220790149809fd48dfb999f732b345b7097a1a) --- drivers/media/usb/uvc/uvc_entity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c index dc56a59ecadc4..5670f714685ff 100644 --- a/drivers/media/usb/uvc/uvc_entity.c +++ b/drivers/media/usb/uvc/uvc_entity.c @@ -68,7 +68,7 @@ static int uvc_mc_register_entity(struct uvc_video_chain *chain, return v4l2_device_register_subdev(&chain->dev->vdev, &entity->subdev); } -static struct v4l2_subdev_ops uvc_subdev_ops = { +static const struct v4l2_subdev_ops uvc_subdev_ops = { }; void uvc_mc_cleanup_entity(struct uvc_entity *entity) From 70161edcdc3bc5ce32d73037326a7a8b37b0659b Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Mon, 6 Nov 2017 15:13:28 -0500 Subject: [PATCH 0058/1852] UPSTREAM: media: uvcvideo: Add D3DFMT_L8 support Microsoft HoloLense UVC sensor uses D3DFMT instead of FOURCC when exposing formats. This adds support for D3DFMT_L8 as exposed from the Acer Windows Mixed Reality Headset. Change-Id: I5689e85bd600029f3fcef37860483c19d639d6ed Signed-off-by: Nicolas Dufresne Reviewed-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit e96cdc9a0aa2fcaa276a76e8ffa86fc10a1d3d99) --- drivers/media/usb/uvc/uvc_driver.c | 5 +++++ drivers/media/usb/uvc/uvcvideo.h | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 8b6dcaebc0f36..237044a000c21 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -94,6 +94,11 @@ static struct uvc_format_desc uvc_fmts[] = { .guid = UVC_GUID_FORMAT_Y8, .fcc = V4L2_PIX_FMT_GREY, }, + { + .name = "Greyscale 8-bit (D3DFMT_L8)", + .guid = UVC_GUID_FORMAT_D3DFMT_L8, + .fcc = V4L2_PIX_FMT_GREY, + }, { .name = "Greyscale 10-bit (Y10 )", .guid = UVC_GUID_FORMAT_Y10, diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index a20e5aa7c7251..3cf2c7db74fe5 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -132,6 +132,11 @@ { 'R', 'W', '1', '0', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} +#define UVC_GUID_FORMAT_D3DFMT_L8 \ + {0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} + + /* ------------------------------------------------------------------------ * Driver specific constants. */ From 248c3b5b6c804292b6a555f948126a1e4f547fbc Mon Sep 17 00:00:00 2001 From: Baoyou Xie Date: Wed, 6 Sep 2017 22:59:48 -0400 Subject: [PATCH 0059/1852] UPSTREAM: media: uvcvideo: Mark buffer error where overflow Some cameras post inaccurate frame where next frame data overlap it. this results in screen flicker, and it need to be prevented. So this patch marks the buffer error to discard the frame where buffer overflow. Change-Id: Ibd41b93cf8376b126b6d107a59ab22907fb839e6 Signed-off-by: Baoyou Xie Reviewed-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit dfc1648c576719b5a2701805aab1e208789d5969) --- drivers/media/usb/uvc/uvc_video.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index 2b276ab7764fc..684c34257282f 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1088,6 +1088,7 @@ static void uvc_video_decode_data(struct uvc_streaming *stream, /* Complete the current frame if the buffer size was exceeded. */ if (len > maxlen) { uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n"); + buf->error = 1; buf->state = UVC_BUF_STATE_READY; } } From 1baf1b5d1d7a7f42a5183403afee23f4136aa024 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 17 Oct 2017 13:15:54 -0400 Subject: [PATCH 0060/1852] UPSTREAM: media: uvcvideo: Stream error events carry no data According to the UVC specification, stream error events carry no data. Fix a buffer overflow (that should be harmless given data alignment) when reporting the stream error event by removing the data byte from the message. Change-Id: I0603ed4a092bc02ae2a339c96d1433ec8463336a Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 0393e735649dc41358adb7b603bd57dad1ed3260) --- drivers/media/usb/uvc/uvc_status.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc_status.c index f552ab9979568..1ef20e74b7aca 100644 --- a/drivers/media/usb/uvc/uvc_status.c +++ b/drivers/media/usb/uvc/uvc_status.c @@ -93,8 +93,9 @@ static void uvc_event_streaming(struct uvc_device *dev, __u8 *data, int len) data[1], data[3] ? "pressed" : "released", len); uvc_input_report_key(dev, KEY_CAMERA, data[3]); } else { - uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x " - "len %d.\n", data[1], data[2], data[3], len); + uvc_trace(UVC_TRACE_STATUS, + "Stream %u error event %02x len %d.\n", + data[1], data[2], len); } } From 7e3f2b1e3d1121ea6724ce306ce326418b27350b Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 4 Dec 2017 18:05:17 -0500 Subject: [PATCH 0061/1852] UPSTREAM: media: uvcvideo: Factor out video device registration to a function The function will then be used to register the video device for metadata capture. Change-Id: I5aa5604af149dc108d65575af37fcbdd6c32c403 Signed-off-by: Laurent Pinchart Reviewed-by: Guennadi Liakhovetski Tested-by: Guennadi Liakhovetski Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 31a96f4c872e8fb953c853630f69d5de6ec961c9) --- drivers/media/usb/uvc/uvc_driver.c | 68 +++++++++++++++++++----------- drivers/media/usb/uvc/uvcvideo.h | 8 ++++ 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 237044a000c21..a5fcbdcac1ddc 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -25,6 +25,7 @@ #include #include +#include #include "uvcvideo.h" @@ -1854,52 +1855,65 @@ static void uvc_unregister_video(struct uvc_device *dev) kref_put(&dev->ref, uvc_delete); } -static int uvc_register_video(struct uvc_device *dev, - struct uvc_streaming *stream) +int uvc_register_video_device(struct uvc_device *dev, + struct uvc_streaming *stream, + struct video_device *vdev, + struct uvc_video_queue *queue, + enum v4l2_buf_type type, + const struct v4l2_file_operations *fops, + const struct v4l2_ioctl_ops *ioctl_ops) { - struct video_device *vdev = &stream->vdev; int ret; /* Initialize the video buffers queue. */ - ret = uvc_queue_init(&stream->queue, stream->type, !uvc_no_drop_param); + ret = uvc_queue_init(queue, type, !uvc_no_drop_param); if (ret) return ret; - /* Initialize the streaming interface with default streaming - * parameters. - */ - ret = uvc_video_init(stream); - if (ret < 0) { - uvc_printk(KERN_ERR, "Failed to initialize the device " - "(%d).\n", ret); - return ret; - } - - uvc_debugfs_init_stream(stream); - /* Register the device with V4L. */ - /* We already hold a reference to dev->udev. The video device will be + /* + * We already hold a reference to dev->udev. The video device will be * unregistered before the reference is released, so we don't need to * get another one. */ vdev->v4l2_dev = &dev->vdev; - vdev->fops = &uvc_fops; - vdev->ioctl_ops = &uvc_ioctl_ops; + vdev->fops = fops; + vdev->ioctl_ops = ioctl_ops; vdev->release = uvc_release; vdev->prio = &stream->chain->prio; - if (stream->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) + if (type == V4L2_BUF_TYPE_VIDEO_OUTPUT) vdev->vfl_dir = VFL_DIR_TX; + else + vdev->vfl_dir = VFL_DIR_RX; strlcpy(vdev->name, dev->name, sizeof vdev->name); - /* Set the driver data before calling video_register_device, otherwise - * uvc_v4l2_open might race us. + /* + * Set the driver data before calling video_register_device, otherwise + * the file open() handler might race us. */ video_set_drvdata(vdev, stream); ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1); if (ret < 0) { - uvc_printk(KERN_ERR, "Failed to register video device (%d).\n", + uvc_printk(KERN_ERR, "Failed to register %s device (%d).\n", + v4l2_type_names[type], ret); + return ret; + } + + kref_get(&dev->ref); + return 0; +} + +static int uvc_register_video(struct uvc_device *dev, + struct uvc_streaming *stream) +{ + int ret; + + /* Initialize the streaming interface with default parameters. */ + ret = uvc_video_init(stream); + if (ret < 0) { + uvc_printk(KERN_ERR, "Failed to initialize the device (%d).\n", ret); return ret; } @@ -1909,8 +1923,12 @@ static int uvc_register_video(struct uvc_device *dev, else stream->chain->caps |= V4L2_CAP_VIDEO_OUTPUT; - kref_get(&dev->ref); - return 0; + uvc_debugfs_init_stream(stream); + + /* Register the device with V4L. */ + return uvc_register_video_device(dev, stream, &stream->vdev, + &stream->queue, stream->type, + &uvc_fops, &uvc_ioctl_ops); } /* diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 3cf2c7db74fe5..03a4bd55f63cc 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -694,6 +694,14 @@ void uvc_video_clock_update(struct uvc_streaming *stream, struct vb2_v4l2_buffer *vbuf, struct uvc_buffer *buf); +int uvc_register_video_device(struct uvc_device *dev, + struct uvc_streaming *stream, + struct video_device *vdev, + struct uvc_video_queue *queue, + enum v4l2_buf_type type, + const struct v4l2_file_operations *fops, + const struct v4l2_ioctl_ops *ioctl_ops); + /* Status */ extern int uvc_status_init(struct uvc_device *dev); extern void uvc_status_cleanup(struct uvc_device *dev); From 38aa367db29773ca074c62ada4adfd787db6b49c Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 4 Dec 2017 18:06:01 -0500 Subject: [PATCH 0062/1852] UPSTREAM: media: uvcvideo: Report V4L2 device caps through the video_device structure The V4L2 core populates the struct v4l2_capability device_caps field from the same field in video_device. There's no need to handle that manually in the driver. Change-Id: I5a98bd1ba87a4029e3de74b3ac4c21e90fe6e3a2 Signed-off-by: Laurent Pinchart Reviewed-by: Guennadi Liakhovetski Tested-by: Guennadi Liakhovetski Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 94c53e26dc74744cc4f9a8ddc593b7aef96ba764) --- drivers/media/usb/uvc/uvc_driver.c | 11 +++++++++++ drivers/media/usb/uvc/uvc_v4l2.c | 4 ---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index a5fcbdcac1ddc..60276d3eba090 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1886,6 +1886,17 @@ int uvc_register_video_device(struct uvc_device *dev, vdev->vfl_dir = VFL_DIR_TX; else vdev->vfl_dir = VFL_DIR_RX; + + switch (type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + default: + vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; + break; + case V4L2_BUF_TYPE_VIDEO_OUTPUT: + vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; + break; + } + strlcpy(vdev->name, dev->name, sizeof vdev->name); /* diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c index 0e7d16fe84d42..16971cab03a69 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -558,10 +558,6 @@ static int uvc_ioctl_querycap(struct file *file, void *fh, usb_make_path(stream->dev->udev, cap->bus_info, sizeof(cap->bus_info)); cap->capabilities = V4L2_CAP_DEVICE_CAPS | V4L2_CAP_STREAMING | chain->caps; - if (stream->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) - cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; - else - cap->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; return 0; } From a4c26ec0719ff4403067263867696d28605d0f64 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Wed, 8 Nov 2017 11:00:13 -0500 Subject: [PATCH 0063/1852] UPSTREAM: media: uvcvideo: Add extensible device information Currently the UVC driver assigns a quirk bitmask to the .driver_info field of struct usb_device_id. This patch instroduces a struct to store quirks and possibly other per-device parameters in the future. Conflicts: drivers/media/usb/uvc/uvc_driver.c Change-Id: I0c823a17cc15f73eb7806804b9b8d42c109c86b9 Signed-off-by: Guennadi Liakhovetski Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 3bc85817d7982ed53fbc9b150b0205beff68ca5c) --- drivers/media/usb/uvc/uvc_driver.c | 141 +++++++++++++++++++---------- 1 file changed, 94 insertions(+), 47 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 60276d3eba090..45a0da2686998 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -2000,11 +2000,18 @@ static int uvc_register_chains(struct uvc_device *dev) * USB probe, disconnect, suspend and resume */ +struct uvc_device_info { + u32 quirks; +}; + static int uvc_probe(struct usb_interface *intf, const struct usb_device_id *id) { struct usb_device *udev = interface_to_usbdev(intf); struct uvc_device *dev; + const struct uvc_device_info *info = + (const struct uvc_device_info *)id->driver_info; + u32 quirks = info ? info->quirks : 0; int ret; if (id->idVendor && id->idProduct) @@ -2030,7 +2037,7 @@ static int uvc_probe(struct usb_interface *intf, dev->intf = usb_get_intf(intf); dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber; dev->quirks = (uvc_quirks_param == -1) - ? id->driver_info : uvc_quirks_param; + ? quirks : uvc_quirks_param; if (udev->product != NULL) strlcpy(dev->name, udev->product, sizeof dev->name); @@ -2053,7 +2060,7 @@ static int uvc_probe(struct usb_interface *intf, le16_to_cpu(udev->descriptor.idVendor), le16_to_cpu(udev->descriptor.idProduct)); - if (dev->quirks != id->driver_info) { + if (dev->quirks != quirks) { uvc_printk(KERN_INFO, "Forcing device quirks to 0x%x by module " "parameter for testing purpose.\n", dev->quirks); uvc_printk(KERN_INFO, "Please report required quirks to the " @@ -2252,6 +2259,28 @@ MODULE_PARM_DESC(timeout, "Streaming control requests timeout"); * Driver initialization and cleanup */ +static const struct uvc_device_info uvc_quirk_probe_minmax = { + .quirks = UVC_QUIRK_PROBE_MINMAX, +}; + +static const struct uvc_device_info uvc_quirk_fix_bandwidth = { + .quirks = UVC_QUIRK_FIX_BANDWIDTH, +}; + +static const struct uvc_device_info uvc_quirk_probe_def = { + .quirks = UVC_QUIRK_PROBE_DEF, +}; + +static const struct uvc_device_info uvc_quirk_stream_no_fid = { + .quirks = UVC_QUIRK_STREAM_NO_FID, +}; + +static const struct uvc_device_info uvc_quirk_force_y8 = { + .quirks = UVC_QUIRK_FORCE_Y8, +}; + +#define UVC_QUIRK_INFO(q) (kernel_ulong_t)&(struct uvc_device_info){.quirks = q} + /* * The Logitech cameras listed below have their interface class set to * VENDOR_SPEC because they don't announce themselves as UVC devices, even @@ -2266,7 +2295,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* Genius eFace 2025 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2275,7 +2304,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* Microsoft Lifecam NX-6000 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2284,7 +2313,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* Microsoft Lifecam NX-3000 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2293,7 +2322,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_DEF }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* Microsoft Lifecam VX-7000 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2302,7 +2331,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* Logitech Quickcam Fusion */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2359,7 +2388,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_RESTORE_CTRLS_ON_INIT }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_RESTORE_CTRLS_ON_INIT) }, /* Chicony CNF7129 (Asus EEE 100HE) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2368,7 +2397,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_RESTRICT_FRAME_RATE }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_RESTRICT_FRAME_RATE) }, /* Alcor Micro AU3820 (Future Boy PC USB Webcam) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2377,7 +2406,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* Dell XPS m1530 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2386,7 +2415,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_DEF }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* Dell SP2008WFP Monitor */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2395,7 +2424,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_DEF }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* Dell Alienware X51 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2404,7 +2433,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_DEF }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* Dell Studio Hybrid 140g (OmniVision webcam) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2413,7 +2442,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_DEF }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* Dell XPS M1330 (OmniVision OV7670 webcam) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2422,7 +2451,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_DEF }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* Apple Built-In iSight */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2431,8 +2460,17 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX - | UVC_QUIRK_BUILTIN_ISIGHT }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX + | UVC_QUIRK_BUILTIN_ISIGHT) }, + /* Apple Built-In iSight via iBridge */ + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE + | USB_DEVICE_ID_MATCH_INT_INFO, + .idVendor = 0x05ac, + .idProduct = 0x8600, + .bInterfaceClass = USB_CLASS_VIDEO, + .bInterfaceSubClass = 1, + .bInterfaceProtocol = 0, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* Foxlink ("HP Webcam" on HP Mini 5103) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2441,7 +2479,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_FIX_BANDWIDTH }, + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth }, /* Genesys Logic USB 2.0 PC Camera */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2450,7 +2488,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Hercules Classic Silver */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2459,7 +2497,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_FIX_BANDWIDTH }, + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth }, /* ViMicro Vega */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2468,7 +2506,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_FIX_BANDWIDTH }, + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth }, /* ViMicro - Minoru3D */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2477,7 +2515,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_FIX_BANDWIDTH }, + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth }, /* ViMicro Venus - Minoru3D */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2486,7 +2524,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_FIX_BANDWIDTH }, + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth }, /* Ophir Optronics - SPCAM 620U */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2495,7 +2533,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* MT6227 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2504,8 +2542,8 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX - | UVC_QUIRK_PROBE_DEF }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX + | UVC_QUIRK_PROBE_DEF) }, /* IMC Networks (Medion Akoya) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2514,7 +2552,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* JMicron USB2.0 XGA WebCam */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2523,7 +2561,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* Syntek (HP Spartan) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2532,7 +2570,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Syntek (Samsung Q310) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2541,7 +2579,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Syntek (Packard Bell EasyNote MX52 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2550,7 +2588,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Syntek (Asus F9SG) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2559,7 +2597,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Syntek (Asus U3S) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2568,7 +2606,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Syntek (JAOtech Smart Terminal) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2577,7 +2615,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Miricle 307K */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2586,7 +2624,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Lenovo Thinkpad SL400/SL500 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2595,7 +2633,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STREAM_NO_FID }, + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid }, /* Aveo Technology USB 2.0 Camera */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2604,8 +2642,8 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX - | UVC_QUIRK_PROBE_EXTRAFIELDS }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX + | UVC_QUIRK_PROBE_EXTRAFIELDS) }, /* Aveo Technology USB 2.0 Camera (Tasco USB Microscope) */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2622,7 +2660,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_EXTRAFIELDS }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_EXTRAFIELDS) }, /* Manta MM-353 Plako */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2631,7 +2669,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* FSC WebCam V30S */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2640,7 +2678,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* Arkmicro unbranded */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2649,7 +2687,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_DEF }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def }, /* The Imaging Source USB CCD cameras */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2668,7 +2706,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_STATUS_INTERVAL }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_STATUS_INTERVAL) }, /* MSI StarCam 370i */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2677,7 +2715,7 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX }, + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, /* SiGma Micro USB Web Camera */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2686,8 +2724,8 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_PROBE_MINMAX - | UVC_QUIRK_IGNORE_SELECTOR_UNIT }, + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX + | UVC_QUIRK_IGNORE_SELECTOR_UNIT) }, /* Oculus VR Positional Tracker DK2 */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2696,7 +2734,16 @@ static struct usb_device_id uvc_ids[] = { .bInterfaceClass = USB_CLASS_VIDEO, .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, - .driver_info = UVC_QUIRK_FORCE_Y8 }, + .driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 }, + /* Oculus VR Rift Sensor */ + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE + | USB_DEVICE_ID_MATCH_INT_INFO, + .idVendor = 0x2833, + .idProduct = 0x0211, + .bInterfaceClass = USB_CLASS_VENDOR_SPEC, + .bInterfaceSubClass = 1, + .bInterfaceProtocol = 0, + .driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 }, /* Generic USB Video Class */ { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, 0) }, {} From 1add5ad068d6c499518226e58017d80ccbed7243 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Wed, 8 Nov 2017 11:00:12 -0500 Subject: [PATCH 0064/1852] UPSTREAM: media: v4l: Add a UVC Metadata format Add a pixel format, used by the UVC driver to stream metadata. Conflicts: Documentation/media/uapi/v4l/meta-formats.rst drivers/media/v4l2-core/v4l2-ioctl.c include/uapi/linux/videodev2.h Change-Id: I979fd6b4d5d24510e47a1cfe525e8ae0a1a573ee Signed-off-by: Guennadi Liakhovetski Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 563a01e1012dddbe120d1e1e1c466ea0639a098b) --- Documentation/media/uapi/v4l/meta-formats.rst | 15 ++++++ .../media/uapi/v4l/pixfmt-meta-uvc.rst | 51 +++++++++++++++++++ drivers/media/v4l2-core/v4l2-ioctl.c | 1 + include/uapi/linux/videodev2.h | 3 ++ 4 files changed, 70 insertions(+) create mode 100644 Documentation/media/uapi/v4l/meta-formats.rst create mode 100644 Documentation/media/uapi/v4l/pixfmt-meta-uvc.rst diff --git a/Documentation/media/uapi/v4l/meta-formats.rst b/Documentation/media/uapi/v4l/meta-formats.rst new file mode 100644 index 0000000000000..386feadbd1c35 --- /dev/null +++ b/Documentation/media/uapi/v4l/meta-formats.rst @@ -0,0 +1,15 @@ +.. -*- coding: utf-8; mode: rst -*- + +.. _meta-formats: + +**************** +Metadata Formats +**************** + +These formats are used for the :ref:`metadata` interface only. + + +.. toctree:: + :maxdepth: 1 + + pixfmt-meta-uvc diff --git a/Documentation/media/uapi/v4l/pixfmt-meta-uvc.rst b/Documentation/media/uapi/v4l/pixfmt-meta-uvc.rst new file mode 100644 index 0000000000000..b5165dc090c2f --- /dev/null +++ b/Documentation/media/uapi/v4l/pixfmt-meta-uvc.rst @@ -0,0 +1,51 @@ +.. -*- coding: utf-8; mode: rst -*- + +.. _v4l2-meta-fmt-uvc: + +******************************* +V4L2_META_FMT_UVC ('UVCH') +******************************* + +UVC Payload Header Data + + +Description +=========== + +This format describes standard UVC metadata, extracted from UVC packet headers +and provided by the UVC driver through metadata video nodes. That data includes +exact copies of the standard part of UVC Payload Header contents and auxiliary +timing information, required for precise interpretation of timestamps, contained +in those headers. See section "2.4.3.3 Video and Still Image Payload Headers" of +the "UVC 1.5 Class specification" for details. + +Each UVC payload header can be between 2 and 12 bytes large. Buffers can +contain multiple headers, if multiple such headers have been transmitted by the +camera for the respective frame. However, the driver may drop headers when the +buffer is full, when they contain no useful information (e.g. those without the +SCR field or with that field identical to the previous header), or generally to +perform rate limiting when the device sends a large number of headers. + +Each individual block contains the following fields: + +.. flat-table:: UVC Metadata Block + :widths: 1 4 + :header-rows: 1 + :stub-columns: 0 + + * - Field + - Description + * - __u64 ts; + - system timestamp in host byte order, measured by the driver upon + reception of the payload + * - __u16 sof; + - USB Frame Number in host byte order, also obtained by the driver as + close as possible to the above timestamp to enable correlation between + them + * - :cspan:`1` *The rest is an exact copy of the UVC payload header:* + * - __u8 length; + - length of the rest of the block, including this field + * - __u8 flags; + - Flags, indicating presence of other standard UVC fields + * - __u8 buf[]; + - The rest of the header, possibly including UVC PTS and SCR fields diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index c2ffe1a402273..29dd31748f18f 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1259,6 +1259,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_SDR_FMT_RU12LE: descr = "Real U12LE"; break; case V4L2_META_FMT_RK_ISP1_PARAMS: descr = "Rockchip ISP1 3A params"; break; case V4L2_META_FMT_RK_ISP1_STAT_3A: descr = "Rockchip ISP1 3A statistics"; break; + case V4L2_META_FMT_UVC: descr = "UVC payload header metadata"; break; default: /* Compressed formats */ diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 92e2413508480..e21c709f18ef9 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -646,6 +646,9 @@ struct v4l2_pix_format { #define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 params */ #define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A statistics */ +/* Meta-data formats */ +#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */ + /* priv field value to indicates that subsequent fields are valid. */ #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe From de050de1dfd4b0d74bfb051703931b314aaacd60 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Mon, 3 Apr 2017 08:25:31 -0300 Subject: [PATCH 0065/1852] UPSTREAM: [media] uvcvideo: Don't record timespec_sub The statistics function subtracts two timespecs manually. A helper is provided by the kernel to do this. Replace the implementation, using the helper. Change-Id: I1fc2cdfad723456045515364846958814b30f666 Signed-off-by: Kieran Bingham Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 52276df0b1ce3a833293f4b57fc3b62d6f540901) --- drivers/media/usb/uvc/uvc_video.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index 684c34257282f..3a960e15612a6 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -871,14 +871,8 @@ size_t uvc_video_stats_dump(struct uvc_streaming *stream, char *buf, struct timespec ts; size_t count = 0; - ts.tv_sec = stream->stats.stream.stop_ts.tv_sec - - stream->stats.stream.start_ts.tv_sec; - ts.tv_nsec = stream->stats.stream.stop_ts.tv_nsec - - stream->stats.stream.start_ts.tv_nsec; - if (ts.tv_nsec < 0) { - ts.tv_sec--; - ts.tv_nsec += 1000000000; - } + ts = timespec_sub(stream->stats.stream.stop_ts, + stream->stats.stream.start_ts); /* Compute the SCR.SOF frequency estimate. At the nominal 1kHz SOF * frequency this will not overflow before more than 1h. From f6f1cd5fb168733b246430a94d1d76ed6f5732f5 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Mon, 3 Apr 2017 08:25:32 -0300 Subject: [PATCH 0066/1852] UPSTREAM: [media] uvcvideo: Fix empty packet statistic The frame counters are inadvertently counting packets with content as empty. Fix it by correcting the logic expression Change-Id: I9e77fcebae2130f534dbac0932b405dd26e4033f Fixes: 7bc5edb00bbd [media] uvcvideo: Extract video stream statistics Signed-off-by: Kieran Bingham Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 360a3a90c6261fe24a959ff38f8f6c3a8468f23c) --- drivers/media/usb/uvc/uvc_video.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index 3a960e15612a6..edeeacff1e19c 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -821,7 +821,7 @@ static void uvc_video_stats_decode(struct uvc_streaming *stream, /* Update the packets counters. */ stream->stats.frame.nb_packets++; - if (len > header_size) + if (len <= header_size) stream->stats.frame.nb_empty++; if (data[1] & UVC_STREAM_ERR) From ccac49a63cb29af017812f9bf1e804ffbd2f5634 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Wed, 6 Dec 2017 10:15:40 -0500 Subject: [PATCH 0067/1852] UPSTREAM: media: uvcvideo: Add a metadata device node Some UVC video cameras contain metadata in their payload headers. This patch extracts that data, adding more clock synchronisation information, on both bulk and isochronous endpoints and makes it available to the user space on a separate video node, using the V4L2_CAP_META_CAPTURE capability and the V4L2_BUF_TYPE_META_CAPTURE buffer queue type. By default, only the V4L2_META_FMT_UVC pixel format is available from those nodes. However, cameras can be added to the device ID table to additionally specify their own metadata format, in which case that format will also become available from the metadata node. [Use put_unaligned instead of __put_unaligned_cpu64] [Use put_unaligned for the sof field as well] Conflicts: drivers/media/usb/uvc/uvc_queue.c drivers/media/usb/uvc/uvc_video.c Change-Id: I2696d2c781376e363e0a77d8d895f416aaff09cb Signed-off-by: Guennadi Liakhovetski Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: William Wu (cherry picked from commit 088ead25524583e2200aa99111bea2f66a86545a) --- drivers/media/usb/uvc/Makefile | 2 +- drivers/media/usb/uvc/uvc_driver.c | 15 ++- drivers/media/usb/uvc/uvc_isight.c | 2 +- drivers/media/usb/uvc/uvc_metadata.c | 179 +++++++++++++++++++++++++++ drivers/media/usb/uvc/uvc_queue.c | 56 ++++++--- drivers/media/usb/uvc/uvc_video.c | 135 ++++++++++++++++++-- drivers/media/usb/uvc/uvcvideo.h | 16 ++- include/uapi/linux/uvcvideo.h | 26 ++++ 8 files changed, 401 insertions(+), 30 deletions(-) create mode 100644 drivers/media/usb/uvc/uvc_metadata.c diff --git a/drivers/media/usb/uvc/Makefile b/drivers/media/usb/uvc/Makefile index c26d12fdb8f4e..06c7cd378b268 100644 --- a/drivers/media/usb/uvc/Makefile +++ b/drivers/media/usb/uvc/Makefile @@ -1,5 +1,5 @@ uvcvideo-objs := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o \ - uvc_status.o uvc_isight.o uvc_debugfs.o + uvc_status.o uvc_isight.o uvc_debugfs.o uvc_metadata.o ifeq ($(CONFIG_MEDIA_CONTROLLER),y) uvcvideo-objs += uvc_entity.o endif diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 45a0da2686998..435b2ee7a0f40 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1848,6 +1848,7 @@ static void uvc_unregister_video(struct uvc_device *dev) continue; video_unregister_device(&stream->vdev); + video_unregister_device(&stream->meta.vdev); uvc_debugfs_cleanup_stream(stream); } @@ -1895,6 +1896,9 @@ int uvc_register_video_device(struct uvc_device *dev, case V4L2_BUF_TYPE_VIDEO_OUTPUT: vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; break; + case V4L2_BUF_TYPE_META_CAPTURE: + vdev->device_caps = V4L2_CAP_META_CAPTURE | V4L2_CAP_STREAMING; + break; } strlcpy(vdev->name, dev->name, sizeof vdev->name); @@ -1930,7 +1934,8 @@ static int uvc_register_video(struct uvc_device *dev, } if (stream->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) - stream->chain->caps |= V4L2_CAP_VIDEO_CAPTURE; + stream->chain->caps |= V4L2_CAP_VIDEO_CAPTURE + | V4L2_CAP_META_CAPTURE; else stream->chain->caps |= V4L2_CAP_VIDEO_OUTPUT; @@ -1968,6 +1973,11 @@ static int uvc_register_terms(struct uvc_device *dev, if (ret < 0) return ret; + /* Register a metadata node, but ignore a possible failure, + * complete registration of video nodes anyway. + */ + uvc_meta_register(stream); + term->vdev = &stream->vdev; } @@ -2002,6 +2012,7 @@ static int uvc_register_chains(struct uvc_device *dev) struct uvc_device_info { u32 quirks; + u32 meta_format; }; static int uvc_probe(struct usb_interface *intf, @@ -2038,6 +2049,8 @@ static int uvc_probe(struct usb_interface *intf, dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber; dev->quirks = (uvc_quirks_param == -1) ? quirks : uvc_quirks_param; + if (info) + dev->meta_format = info->meta_format; if (udev->product != NULL) strlcpy(dev->name, udev->product, sizeof dev->name); diff --git a/drivers/media/usb/uvc/uvc_isight.c b/drivers/media/usb/uvc/uvc_isight.c index 8510e7259e763..fb940cfae5752 100644 --- a/drivers/media/usb/uvc/uvc_isight.c +++ b/drivers/media/usb/uvc/uvc_isight.c @@ -100,7 +100,7 @@ static int isight_decode(struct uvc_video_queue *queue, struct uvc_buffer *buf, } void uvc_video_decode_isight(struct urb *urb, struct uvc_streaming *stream, - struct uvc_buffer *buf) + struct uvc_buffer *buf, struct uvc_buffer *meta_buf) { int ret, i; diff --git a/drivers/media/usb/uvc/uvc_metadata.c b/drivers/media/usb/uvc/uvc_metadata.c new file mode 100644 index 0000000000000..cd1aec19cc5b5 --- /dev/null +++ b/drivers/media/usb/uvc/uvc_metadata.c @@ -0,0 +1,179 @@ +/* + * uvc_metadata.c -- USB Video Class driver - Metadata handling + * + * Copyright (C) 2016 + * Guennadi Liakhovetski (guennadi.liakhovetski@intel.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "uvcvideo.h" + +/* ----------------------------------------------------------------------------- + * V4L2 ioctls + */ + +static int uvc_meta_v4l2_querycap(struct file *file, void *fh, + struct v4l2_capability *cap) +{ + struct v4l2_fh *vfh = file->private_data; + struct uvc_streaming *stream = video_get_drvdata(vfh->vdev); + struct uvc_video_chain *chain = stream->chain; + + strlcpy(cap->driver, "uvcvideo", sizeof(cap->driver)); + strlcpy(cap->card, vfh->vdev->name, sizeof(cap->card)); + usb_make_path(stream->dev->udev, cap->bus_info, sizeof(cap->bus_info)); + cap->capabilities = V4L2_CAP_DEVICE_CAPS | V4L2_CAP_STREAMING + | chain->caps; + + return 0; +} + +static int uvc_meta_v4l2_get_format(struct file *file, void *fh, + struct v4l2_format *format) +{ + struct v4l2_fh *vfh = file->private_data; + struct uvc_streaming *stream = video_get_drvdata(vfh->vdev); + struct v4l2_meta_format *fmt = &format->fmt.meta; + + if (format->type != vfh->vdev->queue->type) + return -EINVAL; + + memset(fmt, 0, sizeof(*fmt)); + + fmt->dataformat = stream->meta.format; + fmt->buffersize = UVC_METATADA_BUF_SIZE; + + return 0; +} + +static int uvc_meta_v4l2_try_format(struct file *file, void *fh, + struct v4l2_format *format) +{ + struct v4l2_fh *vfh = file->private_data; + struct uvc_streaming *stream = video_get_drvdata(vfh->vdev); + struct uvc_device *dev = stream->dev; + struct v4l2_meta_format *fmt = &format->fmt.meta; + u32 fmeta = fmt->dataformat; + + if (format->type != vfh->vdev->queue->type) + return -EINVAL; + + memset(fmt, 0, sizeof(*fmt)); + + fmt->dataformat = fmeta == dev->meta_format ? fmeta : V4L2_META_FMT_UVC; + fmt->buffersize = UVC_METATADA_BUF_SIZE; + + return 0; +} + +static int uvc_meta_v4l2_set_format(struct file *file, void *fh, + struct v4l2_format *format) +{ + struct v4l2_fh *vfh = file->private_data; + struct uvc_streaming *stream = video_get_drvdata(vfh->vdev); + struct v4l2_meta_format *fmt = &format->fmt.meta; + int ret; + + ret = uvc_meta_v4l2_try_format(file, fh, format); + if (ret < 0) + return ret; + + /* + * We could in principle switch at any time, also during streaming. + * Metadata buffers would still be perfectly parseable, but it's more + * consistent and cleaner to disallow that. + */ + mutex_lock(&stream->mutex); + + if (uvc_queue_allocated(&stream->queue)) + ret = -EBUSY; + else + stream->meta.format = fmt->dataformat; + + mutex_unlock(&stream->mutex); + + return ret; +} + +static int uvc_meta_v4l2_enum_formats(struct file *file, void *fh, + struct v4l2_fmtdesc *fdesc) +{ + struct v4l2_fh *vfh = file->private_data; + struct uvc_streaming *stream = video_get_drvdata(vfh->vdev); + struct uvc_device *dev = stream->dev; + u32 index = fdesc->index; + + if (fdesc->type != vfh->vdev->queue->type || + index > 1U || (index && !dev->meta_format)) + return -EINVAL; + + memset(fdesc, 0, sizeof(*fdesc)); + + fdesc->type = vfh->vdev->queue->type; + fdesc->index = index; + fdesc->pixelformat = index ? dev->meta_format : V4L2_META_FMT_UVC; + + return 0; +} + +static const struct v4l2_ioctl_ops uvc_meta_ioctl_ops = { + .vidioc_querycap = uvc_meta_v4l2_querycap, + .vidioc_g_fmt_meta_cap = uvc_meta_v4l2_get_format, + .vidioc_s_fmt_meta_cap = uvc_meta_v4l2_set_format, + .vidioc_try_fmt_meta_cap = uvc_meta_v4l2_try_format, + .vidioc_enum_fmt_meta_cap = uvc_meta_v4l2_enum_formats, + .vidioc_reqbufs = vb2_ioctl_reqbufs, + .vidioc_querybuf = vb2_ioctl_querybuf, + .vidioc_qbuf = vb2_ioctl_qbuf, + .vidioc_dqbuf = vb2_ioctl_dqbuf, + .vidioc_create_bufs = vb2_ioctl_create_bufs, + .vidioc_prepare_buf = vb2_ioctl_prepare_buf, + .vidioc_streamon = vb2_ioctl_streamon, + .vidioc_streamoff = vb2_ioctl_streamoff, +}; + +/* ----------------------------------------------------------------------------- + * V4L2 File Operations + */ + +static const struct v4l2_file_operations uvc_meta_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = video_ioctl2, + .open = v4l2_fh_open, + .release = vb2_fop_release, + .poll = vb2_fop_poll, + .mmap = vb2_fop_mmap, +}; + +int uvc_meta_register(struct uvc_streaming *stream) +{ + struct uvc_device *dev = stream->dev; + struct video_device *vdev = &stream->meta.vdev; + struct uvc_video_queue *queue = &stream->meta.queue; + + stream->meta.format = V4L2_META_FMT_UVC; + + /* + * The video interface queue uses manual locking and thus does not set + * the queue pointer. Set it manually here. + */ + vdev->queue = &queue->queue; + + return uvc_register_video_device(dev, stream, vdev, queue, + V4L2_BUF_TYPE_META_CAPTURE, + &uvc_meta_fops, &uvc_meta_ioctl_ops); +} diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_queue.c index ff6feff21e94a..6f0160828bdb8 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -75,17 +75,26 @@ static int uvc_queue_setup(struct vb2_queue *vq, const void *parg, { const struct v4l2_format *fmt = parg; struct uvc_video_queue *queue = vb2_get_drv_priv(vq); - struct uvc_streaming *stream = uvc_queue_to_stream(queue); - - /* Make sure the image size is large enough. */ - if (fmt && fmt->fmt.pix.sizeimage < stream->ctrl.dwMaxVideoFrameSize) - return -EINVAL; + struct uvc_streaming *stream; + unsigned int size; + + switch (vq->type) { + case V4L2_BUF_TYPE_META_CAPTURE: + size = UVC_METATADA_BUF_SIZE; + break; + + default: + /* Make sure the image size is large enough. */ + if (fmt && fmt->fmt.pix.sizeimage < stream->ctrl.dwMaxVideoFrameSize) + return -EINVAL; + stream = uvc_queue_to_stream(queue); + size = fmt ? fmt->fmt.pix.sizeimage : + stream->ctrl.dwMaxVideoFrameSize; + break; + } *nplanes = 1; - - sizes[0] = fmt ? fmt->fmt.pix.sizeimage - : stream->ctrl.dwMaxVideoFrameSize; - + sizes[0] = size; return 0; } @@ -108,7 +117,7 @@ static int uvc_buffer_prepare(struct vb2_buffer *vb) buf->error = 0; buf->mem = vb2_plane_vaddr(vb, 0); buf->length = vb2_plane_size(vb, 0); - if (vb->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) + if (vb->type != V4L2_BUF_TYPE_VIDEO_OUTPUT) buf->bytesused = 0; else buf->bytesused = vb2_get_plane_payload(vb, 0); @@ -171,10 +180,10 @@ static int uvc_start_streaming(struct vb2_queue *vq, unsigned int count) static void uvc_stop_streaming(struct vb2_queue *vq) { struct uvc_video_queue *queue = vb2_get_drv_priv(vq); - struct uvc_streaming *stream = uvc_queue_to_stream(queue); unsigned long flags; - uvc_video_enable(stream, 0); + if (vq->type != V4L2_BUF_TYPE_META_CAPTURE) + uvc_video_enable(uvc_queue_to_stream(queue), 0); spin_lock_irqsave(&queue->irqlock, flags); uvc_queue_return_buffers(queue, UVC_BUF_STATE_ERROR); @@ -192,20 +201,39 @@ static struct vb2_ops uvc_queue_qops = { .stop_streaming = uvc_stop_streaming, }; +static const struct vb2_ops uvc_meta_queue_qops = { + .queue_setup = uvc_queue_setup, + .buf_prepare = uvc_buffer_prepare, + .buf_queue = uvc_buffer_queue, + .wait_prepare = vb2_ops_wait_prepare, + .wait_finish = vb2_ops_wait_finish, + .stop_streaming = uvc_stop_streaming, +}; + int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type, int drop_corrupted) { int ret; queue->queue.type = type; - queue->queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF; + queue->queue.io_modes = VB2_MMAP | VB2_USERPTR; queue->queue.drv_priv = queue; queue->queue.buf_struct_size = sizeof(struct uvc_buffer); - queue->queue.ops = &uvc_queue_qops; queue->queue.mem_ops = &vb2_vmalloc_memops; queue->queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC | V4L2_BUF_FLAG_TSTAMP_SRC_SOE; queue->queue.lock = &queue->mutex; + + switch (type) { + case V4L2_BUF_TYPE_META_CAPTURE: + queue->queue.ops = &uvc_meta_queue_qops; + break; + default: + queue->queue.io_modes |= VB2_DMABUF; + queue->queue.ops = &uvc_queue_qops; + break; + } + ret = vb2_queue_init(&queue->queue); if (ret) return ret; diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index edeeacff1e19c..283506fa3bcd1 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1140,6 +1140,84 @@ static int uvc_video_encode_data(struct uvc_streaming *stream, return nbytes; } +/* ------------------------------------------------------------------------ + * Metadata + */ + +/* + * Additionally to the payload headers we also want to provide the user with USB + * Frame Numbers and system time values. The resulting buffer is thus composed + * of blocks, containing a 64-bit timestamp in nanoseconds, a 16-bit USB Frame + * Number, and a copy of the payload header. + * + * Ideally we want to capture all payload headers for each frame. However, their + * number is unknown and unbound. We thus drop headers that contain no vendor + * data and that either contain no SCR value or an SCR value identical to the + * previous header. + */ +static void uvc_video_decode_meta(struct uvc_streaming *stream, + struct uvc_buffer *meta_buf, + const u8 *mem, unsigned int length) +{ + struct uvc_meta_buf *meta; + size_t len_std = 2; + bool has_pts, has_scr; + unsigned long flags; + unsigned int sof; + struct timespec ts; + const u8 *scr; + + if (!meta_buf || length == 2) + return; + + if (meta_buf->length - meta_buf->bytesused < + length + sizeof(meta->ns) + sizeof(meta->sof)) { + meta_buf->error = 1; + return; + } + + has_pts = mem[1] & UVC_STREAM_PTS; + has_scr = mem[1] & UVC_STREAM_SCR; + + if (has_pts) { + len_std += 4; + scr = mem + 6; + } else { + scr = mem + 2; + } + + if (has_scr) + len_std += 6; + + if (stream->meta.format == V4L2_META_FMT_UVC) + length = len_std; + + if (length == len_std && (!has_scr || + !memcmp(scr, stream->clock.last_scr, 6))) + return; + + meta = (struct uvc_meta_buf *)((u8 *)meta_buf->mem + meta_buf->bytesused); + local_irq_save(flags); + uvc_video_get_ts(&ts); + sof = usb_get_current_frame_number(stream->dev->udev); + local_irq_restore(flags); + put_unaligned(ts.tv_nsec, &meta->ns); + put_unaligned(sof, &meta->sof); + + if (has_scr) + memcpy(stream->clock.last_scr, scr, 6); + + memcpy(&meta->length, mem, length); + meta_buf->bytesused += length + sizeof(meta->ns) + sizeof(meta->sof); + + uvc_trace(UVC_TRACE_FRAME, + "%s(): ts %lu.%06lu, SOF %u, len %u, flags 0x%x, PTS %u, STC %u frame SOF %u\n", + __func__, ts.tv_sec, ts.tv_nsec, meta->sof, meta->length, meta->flags, + has_pts ? *(u32 *)meta->buf : 0, + has_scr ? *(u32 *)scr : 0, + has_scr ? *(u32 *)(scr + 4) & 0x7ff : 0); +} + /* ------------------------------------------------------------------------ * URB handling */ @@ -1158,8 +1236,29 @@ static void uvc_video_validate_buffer(const struct uvc_streaming *stream, /* * Completion handler for video URBs. */ + +static void uvc_video_next_buffers(struct uvc_streaming *stream, + struct uvc_buffer **video_buf, struct uvc_buffer **meta_buf) +{ + if (*meta_buf) { + struct vb2_v4l2_buffer *vb2_meta = &(*meta_buf)->buf; + const struct vb2_v4l2_buffer *vb2_video = &(*video_buf)->buf; + + vb2_meta->sequence = vb2_video->sequence; + vb2_meta->field = vb2_video->field; + vb2_meta->timestamp = vb2_video->timestamp; + + (*meta_buf)->state = UVC_BUF_STATE_READY; + if (!(*meta_buf)->error) + (*meta_buf)->error = (*video_buf)->error; + *meta_buf = uvc_queue_next_buffer(&stream->meta.queue, + *meta_buf); + } + *video_buf = uvc_queue_next_buffer(&stream->queue, *video_buf); +} + static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream, - struct uvc_buffer *buf) + struct uvc_buffer *buf, struct uvc_buffer *meta_buf) { u8 *mem; int ret, i; @@ -1181,14 +1280,15 @@ static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream, urb->iso_frame_desc[i].actual_length); if (ret == -EAGAIN) { uvc_video_validate_buffer(stream, buf); - buf = uvc_queue_next_buffer(&stream->queue, - buf); + uvc_video_next_buffers(stream, &buf, &meta_buf); } } while (ret == -EAGAIN); if (ret < 0) continue; + uvc_video_decode_meta(stream, meta_buf, mem, ret); + /* Decode the payload data. */ uvc_video_decode_data(stream, buf, mem + ret, urb->iso_frame_desc[i].actual_length - ret); @@ -1199,13 +1299,13 @@ static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream, if (buf->state == UVC_BUF_STATE_READY) { uvc_video_validate_buffer(stream, buf); - buf = uvc_queue_next_buffer(&stream->queue, buf); + uvc_video_next_buffers(stream, &buf, &meta_buf); } } } static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, - struct uvc_buffer *buf) + struct uvc_buffer *buf, struct uvc_buffer *meta_buf) { u8 *mem; int len, ret; @@ -1228,8 +1328,7 @@ static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, do { ret = uvc_video_decode_start(stream, buf, mem, len); if (ret == -EAGAIN) - buf = uvc_queue_next_buffer(&stream->queue, - buf); + uvc_video_next_buffers(stream, &buf, &meta_buf); } while (ret == -EAGAIN); /* If an error occurred skip the rest of the payload. */ @@ -1239,6 +1338,8 @@ static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, memcpy(stream->bulk.header, mem, ret); stream->bulk.header_size = ret; + uvc_video_decode_meta(stream, meta_buf, mem, ret); + mem += ret; len -= ret; } @@ -1262,8 +1363,7 @@ static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, uvc_video_decode_end(stream, buf, stream->bulk.header, stream->bulk.payload_size); if (buf->state == UVC_BUF_STATE_READY) - buf = uvc_queue_next_buffer(&stream->queue, - buf); + uvc_video_next_buffers(stream, &buf, &meta_buf); } stream->bulk.header_size = 0; @@ -1273,7 +1373,7 @@ static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, } static void uvc_video_encode_bulk(struct urb *urb, struct uvc_streaming *stream, - struct uvc_buffer *buf) + struct uvc_buffer *buf, struct uvc_buffer *meta_buf) { u8 *mem = urb->transfer_buffer; int len = stream->urb_size, ret; @@ -1319,7 +1419,10 @@ static void uvc_video_complete(struct urb *urb) { struct uvc_streaming *stream = urb->context; struct uvc_video_queue *queue = &stream->queue; + struct uvc_video_queue *qmeta = &stream->meta.queue; + struct vb2_queue *vb2_qmeta = stream->meta.vdev.queue; struct uvc_buffer *buf = NULL; + struct uvc_buffer *buf_meta = NULL; unsigned long flags; int ret; @@ -1338,6 +1441,8 @@ static void uvc_video_complete(struct urb *urb) case -ECONNRESET: /* usb_unlink_urb() called. */ case -ESHUTDOWN: /* The endpoint is being disabled. */ uvc_queue_cancel(queue, urb->status == -ESHUTDOWN); + if (vb2_qmeta) + uvc_queue_cancel(qmeta, urb->status == -ESHUTDOWN); return; } @@ -1347,7 +1452,15 @@ static void uvc_video_complete(struct urb *urb) queue); spin_unlock_irqrestore(&queue->irqlock, flags); - stream->decode(urb, stream, buf); + if (vb2_qmeta) { + spin_lock_irqsave(&qmeta->irqlock, flags); + if (!list_empty(&qmeta->irqqueue)) + buf_meta = list_first_entry(&qmeta->irqqueue, + struct uvc_buffer, queue); + spin_unlock_irqrestore(&qmeta->irqlock, flags); + } + + stream->decode(urb, stream, buf, buf_meta); if ((ret = usb_submit_urb(urb, GFP_ATOMIC)) < 0) { uvc_printk(KERN_ERR, "Failed to resubmit video URB (%d).\n", diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 03a4bd55f63cc..b0084cf260f31 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -457,6 +457,8 @@ struct uvc_stats_stream { unsigned int max_sof; /* Maximum STC.SOF value */ }; +#define UVC_METATADA_BUF_SIZE 1024 + struct uvc_streaming { struct list_head list; struct uvc_device *dev; @@ -488,7 +490,13 @@ struct uvc_streaming { unsigned int frozen : 1; struct uvc_video_queue queue; void (*decode) (struct urb *urb, struct uvc_streaming *video, - struct uvc_buffer *buf); + struct uvc_buffer *buf, struct uvc_buffer *meta_buf); + + struct { + struct video_device vdev; + struct uvc_video_queue queue; + __u32 format; + } meta; /* Context data used by the bulk completion handler. */ struct { @@ -530,6 +538,8 @@ struct uvc_streaming { u16 last_sof; u16 sof_offset; + u8 last_scr[6]; + spinlock_t lock; } clock; }; @@ -539,6 +549,7 @@ struct uvc_device { struct usb_interface *intf; unsigned long warnings; __u32 quirks; + __u32 meta_format; int intfnum; char name[32]; @@ -693,6 +704,7 @@ extern int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit, void uvc_video_clock_update(struct uvc_streaming *stream, struct vb2_v4l2_buffer *vbuf, struct uvc_buffer *buf); +int uvc_meta_register(struct uvc_streaming *stream); int uvc_register_video_device(struct uvc_device *dev, struct uvc_streaming *stream, @@ -755,7 +767,7 @@ extern struct usb_host_endpoint *uvc_find_endpoint( /* Quirks support */ void uvc_video_decode_isight(struct urb *urb, struct uvc_streaming *stream, - struct uvc_buffer *buf); + struct uvc_buffer *buf, struct uvc_buffer *meta_buf); /* debugfs and statistics */ int uvc_debugfs_init(void); diff --git a/include/uapi/linux/uvcvideo.h b/include/uapi/linux/uvcvideo.h index 3b081862b9e89..8381ca7c2ba55 100644 --- a/include/uapi/linux/uvcvideo.h +++ b/include/uapi/linux/uvcvideo.h @@ -67,4 +67,30 @@ struct uvc_xu_control_query { #define UVCIOC_CTRL_MAP _IOWR('u', 0x20, struct uvc_xu_control_mapping) #define UVCIOC_CTRL_QUERY _IOWR('u', 0x21, struct uvc_xu_control_query) +/* + * Metadata node + */ + +/** + * struct uvc_meta_buf - metadata buffer building block + * @ns - system timestamp of the payload in nanoseconds + * @sof - USB Frame Number + * @length - length of the payload header + * @flags - payload header flags + * @buf - optional device-specific header data + * + * UVC metadata nodes fill buffers with possibly multiple instances of this + * struct. The first two fields are added by the driver, they can be used for + * clock synchronisation. The rest is an exact copy of a UVC payload header. + * Only complete objects with complete buffers are included. Therefore it's + * always sizeof(meta->ts) + sizeof(meta->sof) + meta->length bytes large. + */ +struct uvc_meta_buf { + __u64 ns; + __u16 sof; + __u8 length; + __u8 flags; + __u8 buf[]; +} __packed; + #endif From d13d1549b2e8bb5d3c74302904e2c5711b67bf22 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Tue, 27 Mar 2018 17:45:58 +0100 Subject: [PATCH 0068/1852] FROMLIST: media: uvcvideo: Refactor URB descriptors We currently store three separate arrays for each URB reference we hold. Objectify the data needed to track URBs into a single uvc_urb structure, allowing better object management and tracking of the URB. All accesses to the data pointers through stream, are converted to use a uvc_urb pointer for consistency. Change-Id: I03320cff8ec5cb268b62610b9852b32505f136aa Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart Signed-off-by: William Wu (am from https://patchwork.kernel.org/patch/10311045/) --- drivers/media/usb/uvc/uvc_video.c | 49 +++++++++++++++++++------------ drivers/media/usb/uvc/uvcvideo.h | 18 ++++++++++-- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index 283506fa3bcd1..232d785d24f83 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1476,14 +1476,16 @@ static void uvc_free_urb_buffers(struct uvc_streaming *stream) unsigned int i; for (i = 0; i < UVC_URBS; ++i) { - if (stream->urb_buffer[i]) { + struct uvc_urb *uvc_urb = &stream->uvc_urb[i]; + + if (uvc_urb->buffer) { #ifndef CONFIG_DMA_NONCOHERENT usb_free_coherent(stream->dev->udev, stream->urb_size, - stream->urb_buffer[i], stream->urb_dma[i]); + uvc_urb->buffer, uvc_urb->dma); #else - kfree(stream->urb_buffer[i]); + kfree(uvc_urb->buffer); #endif - stream->urb_buffer[i] = NULL; + uvc_urb->buffer = NULL; } } @@ -1521,16 +1523,18 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming *stream, /* Retry allocations until one succeed. */ for (; npackets > 1; npackets /= 2) { for (i = 0; i < UVC_URBS; ++i) { + struct uvc_urb *uvc_urb = &stream->uvc_urb[i]; + stream->urb_size = psize * npackets; #ifndef CONFIG_DMA_NONCOHERENT - stream->urb_buffer[i] = usb_alloc_coherent( + uvc_urb->buffer = usb_alloc_coherent( stream->dev->udev, stream->urb_size, - gfp_flags | __GFP_NOWARN, &stream->urb_dma[i]); + gfp_flags | __GFP_NOWARN, &uvc_urb->dma); #else - stream->urb_buffer[i] = + uvc_urb->buffer = kmalloc(stream->urb_size, gfp_flags | __GFP_NOWARN); #endif - if (!stream->urb_buffer[i]) { + if (!uvc_urb->buffer) { uvc_free_urb_buffers(stream); break; } @@ -1560,13 +1564,15 @@ static void uvc_uninit_video(struct uvc_streaming *stream, int free_buffers) uvc_video_stats_stop(stream); for (i = 0; i < UVC_URBS; ++i) { - urb = stream->urb[i]; + struct uvc_urb *uvc_urb = &stream->uvc_urb[i]; + + urb = uvc_urb->urb; if (urb == NULL) continue; usb_kill_urb(urb); usb_free_urb(urb); - stream->urb[i] = NULL; + uvc_urb->urb = NULL; } if (free_buffers) @@ -1618,6 +1624,8 @@ static int uvc_init_video_isoc(struct uvc_streaming *stream, size = npackets * psize; for (i = 0; i < UVC_URBS; ++i) { + struct uvc_urb *uvc_urb = &stream->uvc_urb[i]; + urb = usb_alloc_urb(npackets, gfp_flags); if (urb == NULL) { uvc_uninit_video(stream, 1); @@ -1630,12 +1638,12 @@ static int uvc_init_video_isoc(struct uvc_streaming *stream, ep->desc.bEndpointAddress); #ifndef CONFIG_DMA_NONCOHERENT urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP; - urb->transfer_dma = stream->urb_dma[i]; + urb->transfer_dma = uvc_urb->dma; #else urb->transfer_flags = URB_ISO_ASAP; #endif urb->interval = ep->desc.bInterval; - urb->transfer_buffer = stream->urb_buffer[i]; + urb->transfer_buffer = uvc_urb->buffer; urb->complete = uvc_video_complete; urb->number_of_packets = npackets; urb->transfer_buffer_length = size; @@ -1645,7 +1653,7 @@ static int uvc_init_video_isoc(struct uvc_streaming *stream, urb->iso_frame_desc[j].length = psize; } - stream->urb[i] = urb; + uvc_urb->urb = urb; } return 0; @@ -1684,21 +1692,22 @@ static int uvc_init_video_bulk(struct uvc_streaming *stream, size = 0; for (i = 0; i < UVC_URBS; ++i) { + struct uvc_urb *uvc_urb = &stream->uvc_urb[i]; + urb = usb_alloc_urb(0, gfp_flags); if (urb == NULL) { uvc_uninit_video(stream, 1); return -ENOMEM; } - usb_fill_bulk_urb(urb, stream->dev->udev, pipe, - stream->urb_buffer[i], size, uvc_video_complete, - stream); + usb_fill_bulk_urb(urb, stream->dev->udev, pipe, uvc_urb->buffer, + size, uvc_video_complete, stream); #ifndef CONFIG_DMA_NONCOHERENT urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; - urb->transfer_dma = stream->urb_dma[i]; + urb->transfer_dma = uvc_urb->dma; #endif - stream->urb[i] = urb; + uvc_urb->urb = urb; } return 0; @@ -1789,7 +1798,9 @@ static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags) /* Submit the URBs. */ for (i = 0; i < UVC_URBS; ++i) { - ret = usb_submit_urb(stream->urb[i], gfp_flags); + struct uvc_urb *uvc_urb = &stream->uvc_urb[i]; + + ret = usb_submit_urb(uvc_urb->urb, gfp_flags); if (ret < 0) { uvc_printk(KERN_ERR, "Failed to submit URB %u " "(%d).\n", i, ret); diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index b0084cf260f31..fb4a85521b3f1 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -459,6 +459,20 @@ struct uvc_stats_stream { #define UVC_METATADA_BUF_SIZE 1024 +/** + * struct uvc_urb - URB context management structure + * + * @urb: the URB described by this context structure + * @buffer: memory storage for the URB + * @dma: DMA coherent addressing for the urb_buffer + */ +struct uvc_urb { + struct urb *urb; + + char *buffer; + dma_addr_t dma; +}; + struct uvc_streaming { struct list_head list; struct uvc_device *dev; @@ -507,9 +521,7 @@ struct uvc_streaming { __u32 max_payload_size; } bulk; - struct urb *urb[UVC_URBS]; - char *urb_buffer[UVC_URBS]; - dma_addr_t urb_dma[UVC_URBS]; + struct uvc_urb uvc_urb[UVC_URBS]; unsigned int urb_size; __u32 sequence; From fa809686900020109b6aa169e0609b800f290f3b Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Tue, 27 Mar 2018 17:45:59 +0100 Subject: [PATCH 0069/1852] FROMLIST: media: uvcvideo: Convert decode functions to use new context structure The URB completion handlers currently reference the stream context. Now that each URB has its own context structure, convert the decode (and one encode) functions to utilise this context for URB management. Change-Id: Ib56b25ca4ec049c5eb75ffceda9c2d8a0c1a96cf Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart Signed-off-by: William Wu (am from https://patchwork.kernel.org/patch/10311067/) --- drivers/media/usb/uvc/uvc_isight.c | 6 ++++-- drivers/media/usb/uvc/uvc_video.c | 26 ++++++++++++++++++-------- drivers/media/usb/uvc/uvcvideo.h | 8 +++++--- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_isight.c b/drivers/media/usb/uvc/uvc_isight.c index fb940cfae5752..7a529c6dc40a9 100644 --- a/drivers/media/usb/uvc/uvc_isight.c +++ b/drivers/media/usb/uvc/uvc_isight.c @@ -99,9 +99,11 @@ static int isight_decode(struct uvc_video_queue *queue, struct uvc_buffer *buf, return 0; } -void uvc_video_decode_isight(struct urb *urb, struct uvc_streaming *stream, - struct uvc_buffer *buf, struct uvc_buffer *meta_buf) +void uvc_video_decode_isight(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, + struct uvc_buffer *meta_buf) { + struct urb *urb = uvc_urb->urb; + struct uvc_streaming *stream = uvc_urb->stream; int ret, i; for (i = 0; i < urb->number_of_packets; ++i) { diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index 232d785d24f83..c1b3532b76bce 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1257,9 +1257,11 @@ static void uvc_video_next_buffers(struct uvc_streaming *stream, *video_buf = uvc_queue_next_buffer(&stream->queue, *video_buf); } -static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream, +static void uvc_video_decode_isoc(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, struct uvc_buffer *meta_buf) { + struct urb *urb = uvc_urb->urb; + struct uvc_streaming *stream = uvc_urb->stream; u8 *mem; int ret, i; @@ -1304,9 +1306,11 @@ static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream, } } -static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, +static void uvc_video_decode_bulk(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, struct uvc_buffer *meta_buf) { + struct urb *urb = uvc_urb->urb; + struct uvc_streaming *stream = uvc_urb->stream; u8 *mem; int len, ret; @@ -1372,9 +1376,12 @@ static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, } } -static void uvc_video_encode_bulk(struct urb *urb, struct uvc_streaming *stream, +static void uvc_video_encode_bulk(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, struct uvc_buffer *meta_buf) { + struct urb *urb = uvc_urb->urb; + struct uvc_streaming *stream = uvc_urb->stream; + u8 *mem = urb->transfer_buffer; int len = stream->urb_size, ret; @@ -1417,7 +1424,8 @@ static void uvc_video_encode_bulk(struct urb *urb, struct uvc_streaming *stream, static void uvc_video_complete(struct urb *urb) { - struct uvc_streaming *stream = urb->context; + struct uvc_urb *uvc_urb = urb->context; + struct uvc_streaming *stream = uvc_urb->stream; struct uvc_video_queue *queue = &stream->queue; struct uvc_video_queue *qmeta = &stream->meta.queue; struct vb2_queue *vb2_qmeta = stream->meta.vdev.queue; @@ -1460,7 +1468,7 @@ static void uvc_video_complete(struct urb *urb) spin_unlock_irqrestore(&qmeta->irqlock, flags); } - stream->decode(urb, stream, buf, buf_meta); + stream->decode(uvc_urb, buf, buf_meta); if ((ret = usb_submit_urb(urb, GFP_ATOMIC)) < 0) { uvc_printk(KERN_ERR, "Failed to resubmit video URB (%d).\n", @@ -1538,6 +1546,8 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming *stream, uvc_free_urb_buffers(stream); break; } + + uvc_urb->stream = stream; } if (i == UVC_URBS) { @@ -1633,7 +1643,7 @@ static int uvc_init_video_isoc(struct uvc_streaming *stream, } urb->dev = stream->dev->udev; - urb->context = stream; + urb->context = uvc_urb; urb->pipe = usb_rcvisocpipe(stream->dev->udev, ep->desc.bEndpointAddress); #ifndef CONFIG_DMA_NONCOHERENT @@ -1700,8 +1710,8 @@ static int uvc_init_video_bulk(struct uvc_streaming *stream, return -ENOMEM; } - usb_fill_bulk_urb(urb, stream->dev->udev, pipe, uvc_urb->buffer, - size, uvc_video_complete, stream); + usb_fill_bulk_urb(urb, stream->dev->udev, pipe, uvc_urb->buffer, + size, uvc_video_complete, uvc_urb); #ifndef CONFIG_DMA_NONCOHERENT urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; urb->transfer_dma = uvc_urb->dma; diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index fb4a85521b3f1..40894260dade0 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -463,11 +463,13 @@ struct uvc_stats_stream { * struct uvc_urb - URB context management structure * * @urb: the URB described by this context structure + * @stream: UVC streaming context * @buffer: memory storage for the URB * @dma: DMA coherent addressing for the urb_buffer */ struct uvc_urb { struct urb *urb; + struct uvc_streaming *stream; char *buffer; dma_addr_t dma; @@ -503,8 +505,8 @@ struct uvc_streaming { /* Buffers queue. */ unsigned int frozen : 1; struct uvc_video_queue queue; - void (*decode) (struct urb *urb, struct uvc_streaming *video, - struct uvc_buffer *buf, struct uvc_buffer *meta_buf); + void (*decode)(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, + struct uvc_buffer *meta_buf); struct { struct video_device vdev; @@ -778,7 +780,7 @@ extern struct usb_host_endpoint *uvc_find_endpoint( struct usb_host_interface *alts, __u8 epaddr); /* Quirks support */ -void uvc_video_decode_isight(struct urb *urb, struct uvc_streaming *stream, +void uvc_video_decode_isight(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, struct uvc_buffer *meta_buf); /* debugfs and statistics */ From 4b6bd5f06e34a8bcb08e94b23f64075a7e6534f9 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Tue, 27 Mar 2018 17:46:00 +0100 Subject: [PATCH 0070/1852] FROMLIST: media: uvcvideo: Protect queue internals with helper The URB completion operation obtains the current buffer by reading directly into the queue internal interface. Protect this queue abstraction by providing a helper uvc_queue_get_current_buffer() which can be used by both the decode task, and the uvc_queue_next_buffer() functions. Change-Id: Ic5401fe9afec00b87bb075f99addae8591de6890 Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart Signed-off-by: William Wu (am from https://patchwork.kernel.org/patch/10311059/) --- drivers/media/usb/uvc/uvc_queue.c | 33 ++++++++++++++++++++++++++----- drivers/media/usb/uvc/uvc_video.c | 6 +----- drivers/media/usb/uvc/uvcvideo.h | 1 + 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_queue.c index 6f0160828bdb8..7025c7625449e 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -421,6 +421,33 @@ void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect) spin_unlock_irqrestore(&queue->irqlock, flags); } +/* + * uvc_queue_get_current_buffer: Obtain the current working output buffer + * + * Buffers may span multiple packets, and even URBs, therefore the active buffer + * remains on the queue until the EOF marker. + */ +static struct uvc_buffer * +__uvc_queue_get_current_buffer(struct uvc_video_queue *queue) +{ + if (list_empty(&queue->irqqueue)) + return NULL; + + return list_first_entry(&queue->irqqueue, struct uvc_buffer, queue); +} + +struct uvc_buffer *uvc_queue_get_current_buffer(struct uvc_video_queue *queue) +{ + struct uvc_buffer *nextbuf; + unsigned long flags; + + spin_lock_irqsave(&queue->irqlock, flags); + nextbuf = __uvc_queue_get_current_buffer(queue); + spin_unlock_irqrestore(&queue->irqlock, flags); + + return nextbuf; +} + struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, struct uvc_buffer *buf) { @@ -437,11 +464,7 @@ struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, spin_lock_irqsave(&queue->irqlock, flags); list_del(&buf->queue); - if (!list_empty(&queue->irqqueue)) - nextbuf = list_first_entry(&queue->irqqueue, struct uvc_buffer, - queue); - else - nextbuf = NULL; + nextbuf = __uvc_queue_get_current_buffer(queue); spin_unlock_irqrestore(&queue->irqlock, flags); buf->state = buf->error ? UVC_BUF_STATE_ERROR : UVC_BUF_STATE_DONE; diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index c1b3532b76bce..c911c596d3217 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1454,11 +1454,7 @@ static void uvc_video_complete(struct urb *urb) return; } - spin_lock_irqsave(&queue->irqlock, flags); - if (!list_empty(&queue->irqqueue)) - buf = list_first_entry(&queue->irqqueue, struct uvc_buffer, - queue); - spin_unlock_irqrestore(&queue->irqlock, flags); + buf = uvc_queue_get_current_buffer(queue); if (vb2_qmeta) { spin_lock_irqsave(&qmeta->irqlock, flags); diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 40894260dade0..131373d089784 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -684,6 +684,7 @@ extern int uvc_queue_streamoff(struct uvc_video_queue *queue, extern void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect); extern struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, struct uvc_buffer *buf); +struct uvc_buffer *uvc_queue_get_current_buffer(struct uvc_video_queue *queue); extern int uvc_queue_mmap(struct uvc_video_queue *queue, struct vm_area_struct *vma); extern unsigned int uvc_queue_poll(struct uvc_video_queue *queue, From 624a590de7a693e865c74b373908e5b8c727c615 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Tue, 27 Mar 2018 17:46:01 +0100 Subject: [PATCH 0071/1852] FROMLIST: media: uvcvideo: queue: Simplify spin-lock usage Both uvc_start_streaming(), and uvc_stop_streaming() are called from userspace context, with interrupts enabled. As such, they do not need to save the IRQ state, and can use spin_lock_irq() and spin_unlock_irq() respectively. Change-Id: I1cde5a8d9a8890cc2b671d1e32d3b6b4b0eac635 Signed-off-by: Kieran Bingham Signed-off-by: William Wu (am from https://patchwork.kernel.org/patch/10311047/) --- drivers/media/usb/uvc/uvc_queue.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_queue.c index 7025c7625449e..6a60dc3715203 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -161,7 +161,6 @@ static int uvc_start_streaming(struct vb2_queue *vq, unsigned int count) { struct uvc_video_queue *queue = vb2_get_drv_priv(vq); struct uvc_streaming *stream = uvc_queue_to_stream(queue); - unsigned long flags; int ret; queue->buf_used = 0; @@ -170,9 +169,9 @@ static int uvc_start_streaming(struct vb2_queue *vq, unsigned int count) if (ret == 0) return 0; - spin_lock_irqsave(&queue->irqlock, flags); + spin_lock_irq(&queue->irqlock); uvc_queue_return_buffers(queue, UVC_BUF_STATE_QUEUED); - spin_unlock_irqrestore(&queue->irqlock, flags); + spin_unlock_irq(&queue->irqlock); return ret; } @@ -180,14 +179,13 @@ static int uvc_start_streaming(struct vb2_queue *vq, unsigned int count) static void uvc_stop_streaming(struct vb2_queue *vq) { struct uvc_video_queue *queue = vb2_get_drv_priv(vq); - unsigned long flags; if (vq->type != V4L2_BUF_TYPE_META_CAPTURE) uvc_video_enable(uvc_queue_to_stream(queue), 0); - spin_lock_irqsave(&queue->irqlock, flags); + spin_lock_irq(&queue->irqlock); uvc_queue_return_buffers(queue, UVC_BUF_STATE_ERROR); - spin_unlock_irqrestore(&queue->irqlock, flags); + spin_unlock_irq(&queue->irqlock); } static struct vb2_ops uvc_queue_qops = { From f187d060777c59e0ea6ede751b21fb29f95f531e Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Tue, 27 Mar 2018 17:46:02 +0100 Subject: [PATCH 0072/1852] FROMLIST: media: uvcvideo: queue: Support asynchronous buffer handling The buffer queue interface currently operates sequentially, processing buffers after they have fully completed. In preparation for supporting parallel tasks operating on the buffers, we will need to support buffers being processed on multiple CPUs. Adapt the uvc_queue_next_buffer() such that a reference count tracks the active use of the buffer, returning the buffer to the VB2 stack at completion. Change-Id: Ia42cca9bed7852175202017b042590d844e8c6b0 Signed-off-by: Kieran Bingham Signed-off-by: William Wu (am from https://patchwork.kernel.org/patch/10311051/) --- drivers/media/usb/uvc/uvc_queue.c | 61 +++++++++++++++++++++++++------ drivers/media/usb/uvc/uvcvideo.h | 4 ++ 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_queue.c index 6a60dc3715203..e9d4a2c35e3ac 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c @@ -134,6 +134,7 @@ static void uvc_buffer_queue(struct vb2_buffer *vb) spin_lock_irqsave(&queue->irqlock, flags); if (likely(!(queue->flags & UVC_QUEUE_DISCONNECTED))) { + kref_init(&buf->ref); list_add_tail(&buf->queue, &queue->irqqueue); } else { /* If the device is disconnected return the buffer to userspace @@ -446,28 +447,66 @@ struct uvc_buffer *uvc_queue_get_current_buffer(struct uvc_video_queue *queue) return nextbuf; } -struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, +/* + * uvc_queue_requeue: Requeue a buffer on our internal irqqueue + * + * Reuse a buffer through our internal queue without the need to 'prepare' + * The buffer will be returned to userspace through the uvc_buffer_queue call if + * the device has been disconnected + */ +static void uvc_queue_requeue(struct uvc_video_queue *queue, struct uvc_buffer *buf) { - struct uvc_buffer *nextbuf; - unsigned long flags; + buf->error = 0; + buf->state = UVC_BUF_STATE_QUEUED; + buf->bytesused = 0; + vb2_set_plane_payload(&buf->buf.vb2_buf, 0, 0); + + uvc_buffer_queue(&buf->buf.vb2_buf); +} + +static void uvc_queue_buffer_complete(struct kref *ref) +{ + struct uvc_buffer *buf = container_of(ref, struct uvc_buffer, ref); + struct vb2_buffer *vb = &buf->buf.vb2_buf; + struct uvc_video_queue *queue = vb2_get_drv_priv(vb->vb2_queue); if ((queue->flags & UVC_QUEUE_DROP_CORRUPTED) && buf->error) { - buf->error = 0; - buf->state = UVC_BUF_STATE_QUEUED; - buf->bytesused = 0; - vb2_set_plane_payload(&buf->buf.vb2_buf, 0, 0); - return buf; + uvc_queue_requeue(queue, buf); + return; } + buf->state = buf->error ? UVC_BUF_STATE_ERROR : UVC_BUF_STATE_DONE; + vb2_set_plane_payload(&buf->buf.vb2_buf, 0, buf->bytesused); + vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE); +} + +/* + * Release a reference on the buffer. Complete the buffer when the last + * reference is released + */ +void uvc_queue_buffer_release(struct uvc_buffer *buf) +{ + kref_put(&buf->ref, uvc_queue_buffer_complete); +} + +/* + * Remove this buffer from the queue. Lifetime will persist while async actions + * are still running (if any), and uvc_queue_buffer_release will give the buffer + * back to VB2 when all users have completed. + */ +struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, + struct uvc_buffer *buf) +{ + struct uvc_buffer *nextbuf; + unsigned long flags; + spin_lock_irqsave(&queue->irqlock, flags); list_del(&buf->queue); nextbuf = __uvc_queue_get_current_buffer(queue); spin_unlock_irqrestore(&queue->irqlock, flags); - buf->state = buf->error ? UVC_BUF_STATE_ERROR : UVC_BUF_STATE_DONE; - vb2_set_plane_payload(&buf->buf.vb2_buf, 0, buf->bytesused); - vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE); + uvc_queue_buffer_release(buf); return nextbuf; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 131373d089784..9e31ca87bc758 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -382,6 +382,9 @@ struct uvc_buffer { unsigned int bytesused; u32 pts; + + /* asynchronous buffer handling */ + struct kref ref; }; #define UVC_QUEUE_DISCONNECTED (1 << 0) @@ -685,6 +688,7 @@ extern void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect); extern struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, struct uvc_buffer *buf); struct uvc_buffer *uvc_queue_get_current_buffer(struct uvc_video_queue *queue); +void uvc_queue_buffer_release(struct uvc_buffer *buf); extern int uvc_queue_mmap(struct uvc_video_queue *queue, struct vm_area_struct *vma); extern unsigned int uvc_queue_poll(struct uvc_video_queue *queue, From b0295715e07a5af592b10942202f158fdc72f607 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Tue, 27 Mar 2018 17:46:03 +0100 Subject: [PATCH 0073/1852] FROMLIST: media: uvcvideo: Move decode processing to process context Newer high definition cameras, and cameras with multiple lenses such as the range of stereo-vision cameras now available have ever increasing data rates. The inclusion of a variable length packet header in URB packets mean that we must memcpy the frame data out to our destination 'manually'. This can result in data rates of up to 2 gigabits per second being processed. To improve efficiency, and maximise throughput, handle the URB decode processing through a work queue to move it from interrupt context, and allow multiple processors to work on URBs in parallel. Change-Id: I825a107e706a964525dcabba4faa9434f499fd96 Signed-off-by: Kieran Bingham Signed-off-by: William Wu (am from https://patchwork.kernel.org/patch/10311055/) --- drivers/media/usb/uvc/uvc_video.c | 108 +++++++++++++++++++++++------- drivers/media/usb/uvc/uvcvideo.h | 28 ++++++++ 2 files changed, 112 insertions(+), 24 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index c911c596d3217..dd645efe97783 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1063,21 +1063,55 @@ static int uvc_video_decode_start(struct uvc_streaming *stream, return data[0]; } -static void uvc_video_decode_data(struct uvc_streaming *stream, +/* + * uvc_video_decode_data_work: Asynchronous memcpy processing + * + * Perform memcpy tasks in process context, with completion handlers + * to return the URB, and buffer handles. + */ +static void uvc_video_copy_data_work(struct work_struct *work) +{ + struct uvc_urb *uvc_urb = container_of(work, struct uvc_urb, work); + unsigned int i; + int ret; + + for (i = 0; i < uvc_urb->async_operations; i++) { + struct uvc_copy_op *op = &uvc_urb->copy_operations[i]; + + memcpy(op->dst, op->src, op->len); + + /* Release reference taken on this buffer */ + uvc_queue_buffer_release(op->buf); + } + + ret = usb_submit_urb(uvc_urb->urb, GFP_ATOMIC); + if (ret < 0) + uvc_printk(KERN_ERR, "Failed to resubmit video URB (%d).\n", + ret); +} + +static void uvc_video_decode_data(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, const __u8 *data, int len) { - unsigned int maxlen, nbytes; - void *mem; + unsigned int active_op = uvc_urb->async_operations; + struct uvc_copy_op *decode = &uvc_urb->copy_operations[active_op]; + unsigned int maxlen; + if (len <= 0) return; - /* Copy the video data to the buffer. */ maxlen = buf->length - buf->bytesused; - mem = buf->mem + buf->bytesused; - nbytes = min((unsigned int)len, maxlen); - memcpy(mem, data, nbytes); - buf->bytesused += nbytes; + + /* Take a buffer reference for async work */ + kref_get(&buf->ref); + + decode->buf = buf; + decode->src = data; + decode->dst = buf->mem + buf->bytesused; + decode->len = min_t(unsigned int, len, maxlen); + + buf->bytesused += decode->len; /* Complete the current frame if the buffer size was exceeded. */ if (len > maxlen) { @@ -1085,6 +1119,8 @@ static void uvc_video_decode_data(struct uvc_streaming *stream, buf->error = 1; buf->state = UVC_BUF_STATE_READY; } + + uvc_urb->async_operations++; } static void uvc_video_decode_end(struct uvc_streaming *stream, @@ -1292,7 +1328,7 @@ static void uvc_video_decode_isoc(struct uvc_urb *uvc_urb, uvc_video_decode_meta(stream, meta_buf, mem, ret); /* Decode the payload data. */ - uvc_video_decode_data(stream, buf, mem + ret, + uvc_video_decode_data(uvc_urb, buf, mem + ret, urb->iso_frame_desc[i].actual_length - ret); /* Process the header again. */ @@ -1354,9 +1390,9 @@ static void uvc_video_decode_bulk(struct uvc_urb *uvc_urb, * sure buf is never dereferenced if NULL. */ - /* Process video data. */ + /* Prepare video data for processing. */ if (!stream->bulk.skip_payload && buf != NULL) - uvc_video_decode_data(stream, buf, mem, len); + uvc_video_decode_data(uvc_urb, buf, mem, len); /* Detect the payload end by a URB smaller than the maximum size (or * a payload size equal to the maximum) and process the header again. @@ -1442,7 +1478,7 @@ static void uvc_video_complete(struct urb *urb) uvc_printk(KERN_WARNING, "Non-zero status (%d) in video " "completion handler.\n", urb->status); - case -ENOENT: /* usb_kill_urb() called. */ + case -ENOENT: /* usb_poison_urb() called. */ if (stream->frozen) return; @@ -1456,6 +1492,9 @@ static void uvc_video_complete(struct urb *urb) buf = uvc_queue_get_current_buffer(queue); + /* Re-initialise the URB async work. */ + uvc_urb->async_operations = 0; + if (vb2_qmeta) { spin_lock_irqsave(&qmeta->irqlock, flags); if (!list_empty(&qmeta->irqqueue)) @@ -1464,12 +1503,24 @@ static void uvc_video_complete(struct urb *urb) spin_unlock_irqrestore(&qmeta->irqlock, flags); } + /* + * Process the URB headers, and optionally queue expensive memcpy tasks + * to be deferred to a work queue. + */ stream->decode(uvc_urb, buf, buf_meta); - if ((ret = usb_submit_urb(urb, GFP_ATOMIC)) < 0) { - uvc_printk(KERN_ERR, "Failed to resubmit video URB (%d).\n", - ret); + /* If no async work is needed, resubmit the URB immediately. */ + if (!uvc_urb->async_operations) { + ret = usb_submit_urb(uvc_urb->urb, GFP_ATOMIC); + if (ret < 0) + uvc_printk(KERN_ERR, + "Failed to resubmit video URB (%d).\n", + ret); + return; } + + INIT_WORK(&uvc_urb->work, uvc_video_copy_data_work); + queue_work(stream->async_wq, &uvc_urb->work); } /* @@ -1564,25 +1615,29 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming *stream, */ static void uvc_uninit_video(struct uvc_streaming *stream, int free_buffers) { - struct urb *urb; - unsigned int i; + struct uvc_urb *uvc_urb; uvc_video_stats_stop(stream); - for (i = 0; i < UVC_URBS; ++i) { - struct uvc_urb *uvc_urb = &stream->uvc_urb[i]; + /* + * We must poison the URBs rather than kill them to ensure that even + * after the completion handler returns, any asynchronous workqueues + * will be prevented from resubmitting the URBs + */ + for_each_uvc_urb(uvc_urb, stream) + usb_poison_urb(uvc_urb->urb); - urb = uvc_urb->urb; - if (urb == NULL) - continue; + flush_workqueue(stream->async_wq); - usb_kill_urb(urb); - usb_free_urb(urb); + for_each_uvc_urb(uvc_urb, stream) { + usb_free_urb(uvc_urb->urb); uvc_urb->urb = NULL; } if (free_buffers) uvc_free_urb_buffers(stream); + + destroy_workqueue(stream->async_wq); } /* @@ -1737,6 +1792,11 @@ static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags) uvc_video_stats_start(stream); + stream->async_wq = alloc_workqueue("uvcvideo", WQ_UNBOUND | WQ_HIGHPRI, + 0); + if (!stream->async_wq) + return -ENOMEM; + if (intf->num_altsetting > 1) { struct usb_host_endpoint *best_ep = NULL; unsigned int best_psize = UINT_MAX; diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 9e31ca87bc758..0dd58a31a11fd 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -462,6 +462,21 @@ struct uvc_stats_stream { #define UVC_METATADA_BUF_SIZE 1024 +/** + * struct uvc_copy_op: Context structure to schedule asynchronous memcpy + * + * @buf: active buf object for this operation + * @dst: copy destination address + * @src: copy source address + * @len: copy length + */ +struct uvc_copy_op { + struct uvc_buffer *buf; + void *dst; + const __u8 *src; + size_t len; +}; + /** * struct uvc_urb - URB context management structure * @@ -469,6 +484,9 @@ struct uvc_stats_stream { * @stream: UVC streaming context * @buffer: memory storage for the URB * @dma: DMA coherent addressing for the urb_buffer + * @async_operations: counter to indicate the number of copy operations + * @copy_operations: work descriptors for asynchronous copy operations + * @work: work queue entry for asynchronous decode */ struct uvc_urb { struct urb *urb; @@ -476,6 +494,10 @@ struct uvc_urb { char *buffer; dma_addr_t dma; + + unsigned int async_operations; + struct uvc_copy_op copy_operations[UVC_MAX_PACKETS]; + struct work_struct work; }; struct uvc_streaming { @@ -508,6 +530,7 @@ struct uvc_streaming { /* Buffers queue. */ unsigned int frozen : 1; struct uvc_video_queue queue; + struct workqueue_struct *async_wq; void (*decode)(struct uvc_urb *uvc_urb, struct uvc_buffer *buf, struct uvc_buffer *meta_buf); @@ -561,6 +584,11 @@ struct uvc_streaming { } clock; }; +#define for_each_uvc_urb(uvc_urb, uvc_streaming) \ + for (uvc_urb = &uvc_streaming->uvc_urb[0]; \ + uvc_urb < &uvc_streaming->uvc_urb[UVC_URBS]; \ + ++uvc_urb) + struct uvc_device { struct usb_device *udev; struct usb_interface *intf; From a86da2574f9e1d50b6b25b8e23d7f1fa24aec846 Mon Sep 17 00:00:00 2001 From: Lin Jianhua Date: Thu, 5 Jul 2018 09:53:49 +0800 Subject: [PATCH 0074/1852] ARM64: dts: rockchip: enable cpufreq 1.2G for rk3308 EVB V11 Change-Id: Ifc077a299c98cb2e1039397f548b1047d10c17c2 Signed-off-by: Lin Jianhua --- arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi b/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi index 35e029ace6470..1c1dfd9b8ee07 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi @@ -255,6 +255,9 @@ }; &cpu0_opp_table { + opp-1200000000 { + status = "okay"; + }; opp-1296000000 { status = "okay"; }; From 891a19c1119f792a455799b601d87c4b9736b134 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Wed, 4 Jul 2018 14:07:44 +0800 Subject: [PATCH 0075/1852] ASoC: rockchip: multi_dais_pcm: dmaengine_mpcm_pointer This patch use the master chan as the sync pointer. and in some case, one or more sub dai may not start at the same time, or one sub dai works always which leading the pointer of each sub dai is different, it depends on the fifo available count and waterlevel. the maximum is the whole fifo size. report the pointer(dma_pos - max_fifo_size) to make sure each sub buffer have been filled out. Change-Id: I5a6d8b3f3c63f8ed7b55b0402429904368adf557 Signed-off-by: Sugar Zhang --- sound/soc/rockchip/rockchip_multi_dais_pcm.c | 37 +++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/sound/soc/rockchip/rockchip_multi_dais_pcm.c b/sound/soc/rockchip/rockchip_multi_dais_pcm.c index c41e582347857..f9c9a56f5a85a 100644 --- a/sound/soc/rockchip/rockchip_multi_dais_pcm.c +++ b/sound/soc/rockchip/rockchip_multi_dais_pcm.c @@ -17,6 +17,8 @@ #include "rockchip_multi_dais.h" +#define MAX_FIFO_SIZE 32 /* max fifo size in frames */ + struct dmaengine_mpcm { struct rk_mdais_dev *mdais; struct dma_chan *tx_chans[MAX_DAIS]; @@ -30,6 +32,8 @@ struct dmaengine_mpcm_runtime_data { unsigned int *channel_maps; int num_chans; unsigned int pos; + unsigned int master_chan; + bool start_flag; }; static inline struct dmaengine_mpcm_runtime_data *substream_to_prtd( @@ -145,6 +149,7 @@ static int dmaengine_mpcm_prepare_and_submit(struct snd_pcm_substream *substream desc->callback = dmaengine_mpcm_dma_complete; desc->callback_param = substream; callback = true; + prtd->master_chan = i; } prtd->cookies[i] = dmaengine_submit(desc); offset += samples_to_bytes(runtime, maps[i]); @@ -215,12 +220,15 @@ static int snd_dmaengine_mpcm_trigger(struct snd_pcm_substream *substream, int c mpcm_dmaengine_pause(prtd); else mpcm_dmaengine_terminate_all(prtd); + prtd->start_flag = false; break; case SNDRV_PCM_TRIGGER_PAUSE_PUSH: mpcm_dmaengine_pause(prtd); + prtd->start_flag = false; break; case SNDRV_PCM_TRIGGER_STOP: mpcm_dmaengine_terminate_all(prtd); + prtd->start_flag = false; break; default: return -EINVAL; @@ -393,6 +401,7 @@ static int dmaengine_mpcm_open(struct snd_pcm_substream *substream) } prtd->num_chans = pcm->mdais->num_dais; + prtd->start_flag = false; substream->runtime->private_data = prtd; return 0; @@ -430,22 +439,32 @@ static int dmaengine_mpcm_new(struct snd_soc_pcm_runtime *rtd) static snd_pcm_uframes_t dmaengine_mpcm_pointer(struct snd_pcm_substream *substream) { struct dmaengine_mpcm_runtime_data *prtd = substream_to_prtd(substream); + struct snd_pcm_runtime *runtime = substream->runtime; struct dma_tx_state state; + snd_pcm_uframes_t frames; unsigned int buf_size; unsigned int pos = 0; - int i = 0; + unsigned int master = prtd->master_chan; buf_size = snd_pcm_lib_buffer_bytes(substream); - for (i = 0; i < prtd->num_chans; i++) { - if (!prtd->chans[i]) - continue; - dmaengine_tx_status(prtd->chans[i], prtd->cookies[i], &state); - if (state.residue > 0 && state.residue <= buf_size) - pos = buf_size - state.residue; - break; + dmaengine_tx_status(prtd->chans[master], prtd->cookies[master], &state); + if (state.residue > 0 && state.residue <= buf_size) + pos = buf_size - state.residue; + + frames = bytes_to_frames(substream->runtime, pos); + if (!prtd->start_flag && frames >= MAX_FIFO_SIZE) + prtd->start_flag = true; + + if (prtd->start_flag) { + if (frames >= MAX_FIFO_SIZE) + frames -= MAX_FIFO_SIZE; + else + frames = runtime->buffer_size + frames - MAX_FIFO_SIZE; + } else { + frames = 0; } - return bytes_to_frames(substream->runtime, pos); + return frames; } static int dmaengine_mpcm_close(struct snd_pcm_substream *substream) From 801a5d302fdd33f39a9cb4147bc4bf241ef0ee00 Mon Sep 17 00:00:00 2001 From: Dingqiang Lin Date: Wed, 13 Jun 2018 17:52:12 +0800 Subject: [PATCH 0076/1852] arm64: dts: rockchip: enable sfc for rk3308-evb-v10 Change-Id: I091998de2517b9ca5afc77d7c6c02410dd86c618 Signed-off-by: Dingqiang Lin --- arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi index cf8a61b0945c5..30f3cbea0a0d7 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi @@ -675,6 +675,10 @@ status = "disabled"; }; +&sfc { + status = "okay"; +}; + &tsadc { rockchip,hw-tshut-mode = <0>; /* tshut mode 0:CRU 1:GPIO */ rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */ From 01de979edbe813c025b28e7f1ceb5cbfe99b8573 Mon Sep 17 00:00:00 2001 From: Dingqiang Lin Date: Wed, 13 Jun 2018 17:56:21 +0800 Subject: [PATCH 0077/1852] arm64: configs: rk3308_linux_defconfig: enable slc nand and sfc devices driver 1.Disable former nandc configs and change to sftl slc nand; 2.Enables sfc spi nand drivers and sfc spi nand drivers. Change-Id: Ia17e4e5cac5a2859cf2cb2013d40c446b88194b5 Signed-off-by: Dingqiang Lin --- arch/arm64/configs/rk3308_linux_defconfig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/arm64/configs/rk3308_linux_defconfig b/arch/arm64/configs/rk3308_linux_defconfig index f9c5775f21542..a1555cb1479fd 100644 --- a/arch/arm64/configs/rk3308_linux_defconfig +++ b/arch/arm64/configs/rk3308_linux_defconfig @@ -229,7 +229,10 @@ CONFIG_PHY_ROCKCHIP_INNO_USB2=y CONFIG_ANDROID=y CONFIG_NVMEM=y CONFIG_ROCKCHIP_OTP=y -CONFIG_RK_NAND=y +CONFIG_RK_FLASH=y +CONFIG_RK_NANDC_NAND=y +CONFIG_RK_SFC_NAND=y +CONFIG_RK_SFC_NOR=y CONFIG_ROCKCHIP_SIP=y CONFIG_EXT2_FS=y CONFIG_EXT4_FS=m From 09145a1fc8a7ffc0420f91bae47a6ddebb2f45b3 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Tue, 26 Jun 2018 18:09:59 +0800 Subject: [PATCH 0078/1852] soc: rockchip: opp_select: Use 'rockchip,thermal-zone' property for pvtm Make the property more general. Change-Id: Ieacbaccdc008ff8cee51ebfafc203b3200a1c5af Signed-off-by: Finley Xiao --- .../devicetree/bindings/cpufreq/cpufreq-rockchip.txt | 2 +- arch/arm/boot/dts/rk3288.dtsi | 2 +- arch/arm64/boot/dts/rockchip/px30.dtsi | 2 +- arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi | 6 +++--- drivers/soc/rockchip/rockchip_opp_select.c | 9 ++++++--- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Documentation/devicetree/bindings/cpufreq/cpufreq-rockchip.txt b/Documentation/devicetree/bindings/cpufreq/cpufreq-rockchip.txt index 06b4c2f5a608f..01b16ad55c433 100644 --- a/Documentation/devicetree/bindings/cpufreq/cpufreq-rockchip.txt +++ b/Documentation/devicetree/bindings/cpufreq/cpufreq-rockchip.txt @@ -47,7 +47,7 @@ In 'operating-points-v2' table: used when current temperature is below reference temperature. Conversely, The second one is used when current temperature is above reference temperature. -- rockchip,pvtm-thermal-zone: A thermal zone node containing thermal sensor, +- rockchip,thermal-zone: A thermal zone node containing thermal sensor, it's used to get the current temperature. - nvmem-cells: A phandle to cpu_leakage data provided by a nvmem device. diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi index cc19625d64bad..8b76ce9606214 100644 --- a/arch/arm/boot/dts/rk3288.dtsi +++ b/arch/arm/boot/dts/rk3288.dtsi @@ -158,7 +158,7 @@ rockchip,pvtm-error = <1000>; rockchip,pvtm-ref-temp = <35>; rockchip,pvtm-temp-prop = <(-18) (-18)>; - rockchip,pvtm-thermal-zone = "soc-thermal"; + rockchip,thermal-zone = "soc-thermal"; opp-126000000 { opp-hz = /bits/ 64 <126000000>; diff --git a/arch/arm64/boot/dts/rockchip/px30.dtsi b/arch/arm64/boot/dts/rockchip/px30.dtsi index 049e344ec54d3..3f85e8abc4ed2 100644 --- a/arch/arm64/boot/dts/rockchip/px30.dtsi +++ b/arch/arm64/boot/dts/rockchip/px30.dtsi @@ -127,7 +127,7 @@ rockchip,pvtm-error = <1000>; rockchip,pvtm-ref-temp = <40>; rockchip,pvtm-temp-prop = <(-56) (-56)>; - rockchip,pvtm-thermal-zone = "soc-thermal"; + rockchip,thermal-zone = "soc-thermal"; opp-408000000 { opp-hz = /bits/ 64 <408000000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi index f443a9a21f986..82514d1b7b114 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi @@ -64,7 +64,7 @@ rockchip,pvtm-error = <1000>; rockchip,pvtm-ref-temp = <41>; rockchip,pvtm-temp-prop = <115 66>; - rockchip,pvtm-thermal-zone = "soc-thermal"; + rockchip,thermal-zone = "soc-thermal"; opp-408000000 { opp-hz = /bits/ 64 <408000000>; @@ -144,7 +144,7 @@ rockchip,pvtm-error = <1000>; rockchip,pvtm-ref-temp = <41>; rockchip,pvtm-temp-prop = <71 35>; - rockchip,pvtm-thermal-zone = "soc-thermal"; + rockchip,thermal-zone = "soc-thermal"; opp-408000000 { opp-hz = /bits/ 64 <408000000>; @@ -241,7 +241,7 @@ rockchip,pvtm-error = <1000>; rockchip,pvtm-ref-temp = <41>; rockchip,pvtm-temp-prop = <46 12>; - rockchip,pvtm-thermal-zone = "gpu-thermal"; + rockchip,thermal-zone = "gpu-thermal"; opp-200000000 { opp-hz = /bits/ 64 <200000000>; diff --git a/drivers/soc/rockchip/rockchip_opp_select.c b/drivers/soc/rockchip/rockchip_opp_select.c index 231f24839922c..61c290ab49137 100644 --- a/drivers/soc/rockchip/rockchip_opp_select.c +++ b/drivers/soc/rockchip/rockchip_opp_select.c @@ -232,9 +232,12 @@ static int rockchip_parse_pvtm_config(struct device_node *np, if (of_property_read_u32_array(np, "rockchip,pvtm-temp-prop", pvtm->temp_prop, 2)) return -EINVAL; - if (of_property_read_string(np, "rockchip,pvtm-thermal-zone", - &pvtm->tz_name)) - return -EINVAL; + if (of_property_read_string(np, "rockchip,thermal-zone", + &pvtm->tz_name)) { + if (of_property_read_string(np, "rockchip,pvtm-thermal-zone", + &pvtm->tz_name)) + return -EINVAL; + } pvtm->tz = thermal_zone_get_zone_by_name(pvtm->tz_name); if (IS_ERR(pvtm->tz)) return -EINVAL; From 0904dd2e617c68cf6530845889d5b01ef0a9d6bc Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Tue, 26 Jun 2018 22:09:05 +0800 Subject: [PATCH 0079/1852] PM / OPP: Rename dev_pm_opp_check_initial_rate to dev_pm_opp_check_rate_volt Make the function more general. Change-Id: Ic10b84ddb6b7eff33e1a1fe491f05f10a9c6015a Signed-off-by: Finley Xiao --- drivers/base/power/opp/core.c | 24 ++++++++++++------------ drivers/cpufreq/cpufreq-dt.c | 5 +---- include/linux/pm_opp.h | 5 ++--- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c index 7028daa3adcbd..e185950a3eece 100644 --- a/drivers/base/power/opp/core.c +++ b/drivers/base/power/opp/core.c @@ -704,15 +704,15 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) EXPORT_SYMBOL_GPL(dev_pm_opp_set_rate); /** - * dev_pm_opp_check_initial_rate() - Configure new OPP based on initial rate + * dev_pm_opp_check_rate_volt() - Configure new OPP based on current rate * @dev: device for which we do this operation * * This configures the power-supplies and clock source to the levels specified - * by the OPP corresponding to the system initial rate. + * by the OPP corresponding to current rate. * * Locking: This function takes rcu_read_lock(). */ -int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq) +int dev_pm_opp_check_rate_volt(struct device *dev, bool force) { struct opp_table *opp_table; struct dev_pm_opp *opp; @@ -741,7 +741,6 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq) } old_freq = clk_get_rate(clk); - *cur_freq = old_freq; target_freq = old_freq; opp = dev_pm_opp_find_freq_ceil(dev, &target_freq); @@ -772,11 +771,14 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq) target_freq, u_volt); if (old_freq == target_freq) { - ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min, - u_volt_max); - if (ret) { - dev_err(dev, "failed to set volt %lu\n", u_volt); - return ret; + if (old_volt != u_volt || force) { + ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min, + u_volt_max); + if (ret) { + dev_err(dev, "failed to set volt %lu\n", + u_volt); + return ret; + } } return 0; } @@ -798,8 +800,6 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq) return ret; } - *cur_freq = clk_get_rate(clk); - /* Scaling down? Scale voltage after frequency */ if (target_freq < old_freq) { ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min, @@ -812,7 +812,7 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq) return 0; } -EXPORT_SYMBOL_GPL(dev_pm_opp_check_initial_rate); +EXPORT_SYMBOL_GPL(dev_pm_opp_check_rate_volt); /* OPP-dev Helpers */ static void _kfree_opp_dev_rcu(struct rcu_head *head) diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c index f07774f96a14a..2632f162e4250 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -158,7 +158,6 @@ static int cpufreq_init(struct cpufreq_policy *policy) struct cpumask cpus; #endif unsigned int transition_latency; - unsigned long cur_freq; bool opp_v1 = false; const char *name; int ret, scale; @@ -314,9 +313,7 @@ static int cpufreq_init(struct cpufreq_policy *policy) policy->down_transition_delay_us = 50000; /* 50ms */ if (check_init < MAX_CLUSTERS) { - ret = dev_pm_opp_check_initial_rate(cpu_dev, &cur_freq); - if (!ret) - policy->cur = cur_freq / 1000; + dev_pm_opp_check_rate_volt(cpu_dev, true); check_init++; } diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index fb07ba05699a1..33f5e8d95786d 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -66,7 +66,7 @@ void dev_pm_opp_put_prop_name(struct device *dev); int dev_pm_opp_set_regulator(struct device *dev, const char *name); void dev_pm_opp_put_regulator(struct device *dev); int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq); -int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq); +int dev_pm_opp_check_rate_volt(struct device *dev, bool force); #else static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) { @@ -180,8 +180,7 @@ static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_f return -EINVAL; } -static inline int dev_pm_opp_check_initial_rate(struct device *dev, - unsigned long *cur_freq) +static inline int dev_pm_opp_check_rate_volt(struct device *dev, bool force) { return -EINVAL; } From 062bc815d8eba50a40998c331b31be312ce07bc5 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Tue, 26 Jun 2018 22:15:30 +0800 Subject: [PATCH 0080/1852] cpufreq: rockchip: implement rockchip_cpufreq_check_rate_volt() Change-Id: I707c88d217725e66119aa28e8823ce68ac3abfba Signed-off-by: Finley Xiao --- drivers/cpufreq/cpufreq-dt.c | 10 +++------- drivers/cpufreq/rockchip-cpufreq.c | 17 +++++++++++++++++ include/linux/cpufreq.h | 6 ++++++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c index 2632f162e4250..c3889bf41545e 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -32,8 +32,6 @@ #include #endif -#define MAX_CLUSTERS 2 - struct private_data { struct device *cpu_dev; struct thermal_cooling_device *cdev; @@ -161,7 +159,6 @@ static int cpufreq_init(struct cpufreq_policy *policy) bool opp_v1 = false; const char *name; int ret, scale; - static int check_init; cpu_dev = get_cpu_device(policy->cpu); if (!cpu_dev) { @@ -312,10 +309,9 @@ static int cpufreq_init(struct cpufreq_policy *policy) policy->up_transition_delay_us = transition_latency / NSEC_PER_USEC; policy->down_transition_delay_us = 50000; /* 50ms */ - if (check_init < MAX_CLUSTERS) { - dev_pm_opp_check_rate_volt(cpu_dev, true); - check_init++; - } +#ifdef CONFIG_ARCH_ROCKCHIP + rockchip_cpufreq_check_rate_volt(cpu_dev); +#endif return 0; diff --git a/drivers/cpufreq/rockchip-cpufreq.c b/drivers/cpufreq/rockchip-cpufreq.c index cd8bcdac0e457..73ebcf3f70374 100644 --- a/drivers/cpufreq/rockchip-cpufreq.c +++ b/drivers/cpufreq/rockchip-cpufreq.c @@ -48,6 +48,7 @@ struct cluster_info { bool offline; bool rebooting; bool freq_limit; + bool is_check_init; }; static LIST_HEAD(cluster_info_list); @@ -172,6 +173,22 @@ int rockchip_cpufreq_set_scale_rate(struct device *dev, unsigned long rate) } EXPORT_SYMBOL_GPL(rockchip_cpufreq_set_scale_rate); +int rockchip_cpufreq_check_rate_volt(struct device *dev) +{ + struct cluster_info *cluster; + + cluster = rockchip_cluster_lookup_by_dev(dev); + if (!cluster) + return -EINVAL; + if (cluster->is_check_init) + return 0; + dev_pm_opp_check_rate_volt(dev, true); + cluster->is_check_init = true; + + return 0; +} +EXPORT_SYMBOL_GPL(rockchip_cpufreq_check_rate_volt); + static int rockchip_cpufreq_cluster_init(int cpu, struct cluster_info *cluster) { struct device_node *np; diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 24b9e4e137b4d..be27ec362a9dc 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -699,6 +699,7 @@ unsigned long cpufreq_scale_max_freq_capacity(int cpu); unsigned int rockchip_cpufreq_adjust_target(int cpu, unsigned int freq); int rockchip_cpufreq_get_scale(int cpu); int rockchip_cpufreq_set_scale_rate(struct device *dev, unsigned long rate); +int rockchip_cpufreq_check_rate_volt(struct device *dev); #else static inline unsigned int rockchip_cpufreq_adjust_target(int cpu, unsigned int freq) @@ -716,5 +717,10 @@ static inline int rockchip_cpufreq_set_scale_rate(struct device *dev, { return -EINVAL; } + +static inline int rockchip_cpufreq_check_rate_volt(struct device *dev) +{ + return -EINVAL; +} #endif #endif /* _LINUX_CPUFREQ_H */ From 8813307f42f3fd41c5f74a447b4d59ae35e69a0b Mon Sep 17 00:00:00 2001 From: Huibin Hong Date: Fri, 6 Jul 2018 09:50:11 +0800 Subject: [PATCH 0081/1852] arm64: dts: rockchip: corrected clock-names for uart1 of rk3328 Change-Id: I4f2f1265ba517b5effce0c1b4130d0eb10eae9e5 Signed-off-by: Huibin Hong --- arch/arm64/boot/dts/rockchip/rk3328.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi index b319e731d97b4..41c6b4210a715 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -454,7 +454,7 @@ reg = <0x0 0xff120000 0x0 0x100>; interrupts = ; clocks = <&cru SCLK_UART1>, <&cru PCLK_UART1>; - clock-names = "sclk_uart", "pclk_uart"; + clock-names = "baudclk", "apb_pclk"; reg-shift = <2>; reg-io-width = <4>; dmas = <&dmac 4>, <&dmac 5>; From c6fff95e8d41ef5fc387d8334a7a988cd1971097 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Wed, 23 May 2018 11:24:32 +0800 Subject: [PATCH 0082/1852] media: soc_camera: add ov9750 sensor driver Change-Id: I027a08ce90a78d4124c07471f21218599fdad815 Signed-off-by: Cai YiWei --- drivers/media/i2c/soc_camera/rockchip/Kconfig | 7 + .../media/i2c/soc_camera/rockchip/Makefile | 1 + .../rockchip/ov9750_v4l2-i2c-subdev.c | 1036 +++++++++++++++++ .../soc_camera/rockchip/ov_camera_module.h | 1 + 4 files changed, 1045 insertions(+) create mode 100644 drivers/media/i2c/soc_camera/rockchip/ov9750_v4l2-i2c-subdev.c diff --git a/drivers/media/i2c/soc_camera/rockchip/Kconfig b/drivers/media/i2c/soc_camera/rockchip/Kconfig index 9572f4fc6937e..616f8827480d8 100644 --- a/drivers/media/i2c/soc_camera/rockchip/Kconfig +++ b/drivers/media/i2c/soc_camera/rockchip/Kconfig @@ -68,3 +68,10 @@ config VIDEO_OV13850 default n ---help--- This is ov13850 camera driver adapt to rockchip cif isp platform. + +config VIDEO_OV9750 + tristate "ov9750 driver adapt to rockchip cif isp platform" + depends on VIDEO_V4L2 && VIDEO_RK_CIF_ISP10 && I2C + default n + ---help--- + This is ov9750 camera driver adapt to rockchip cif isp platform. diff --git a/drivers/media/i2c/soc_camera/rockchip/Makefile b/drivers/media/i2c/soc_camera/rockchip/Makefile index 0e7ffbd16e734..eeff7e0d16515 100644 --- a/drivers/media/i2c/soc_camera/rockchip/Makefile +++ b/drivers/media/i2c/soc_camera/rockchip/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_VIDEO_ADV7181) += adv_camera_module.o rk_camera_module.o adv7181_v4 obj-$(CONFIG_VIDEO_OV7675) += ov_camera_module.o rk_camera_module.o ov7675_v4l2-i2c-subdev.o obj-$(CONFIG_VIDEO_NT99230) += ov_camera_module.o rk_camera_module.o nt99230_v4l2-i2c-subdev.o obj-$(CONFIG_VIDEO_OV13850) += ov_camera_module.o rk_camera_module.o ov13850_v4l2-i2c-subdev.o +obj-$(CONFIG_VIDEO_OV9750) += ov_camera_module.o rk_camera_module.o ov9750_v4l2-i2c-subdev.o diff --git a/drivers/media/i2c/soc_camera/rockchip/ov9750_v4l2-i2c-subdev.c b/drivers/media/i2c/soc_camera/rockchip/ov9750_v4l2-i2c-subdev.c new file mode 100644 index 0000000000000..69b4be96ce662 --- /dev/null +++ b/drivers/media/i2c/soc_camera/rockchip/ov9750_v4l2-i2c-subdev.c @@ -0,0 +1,1036 @@ +/* + * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd. + * + * Copyright (C) 2012-2014 Intel Mobile Communications GmbH + * + * Copyright (C) 2008 Texas Instruments. + * + * This file is licensed under the terms of the GNU General Public License + * version 2. This program is licensed "as is" without any warranty of any + * kind, whether express or implied. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "ov_camera_module.h" + +#define OV9750_DRIVER_NAME "ov9750" + +#define OV9750_FETCH_LSB_GAIN(VAL) (VAL & 0xFF) +#define OV9750_FETCH_MSB_GAIN(VAL) ((VAL >> 8) & 0xff) +#define OV9750_AEC_PK_LONG_GAIN_HIGH_REG 0x3508 +#define OV9750_AEC_PK_LONG_GAIN_LOW_REG 0x3509 + +#define OV9750_AEC_PK_LONG_EXPO_3RD_REG 0x3500 +#define OV9750_AEC_PK_LONG_EXPO_2ND_REG 0x3501 +#define OV9750_AEC_PK_LONG_EXPO_1ST_REG 0x3502 + +#define OV9750_AEC_GROUP_UPDATE_ADDRESS 0x3208 +#define OV9750_AEC_GROUP_UPDATE_START_DATA 0x00 +#define OV9750_AEC_GROUP_UPDATE_END_DATA 0x10 +#define OV9750_AEC_GROUP_UPDATE_END_LAUNCH 0xA0 + +#define OV9750_FETCH_3RD_BYTE_EXP(VAL) (((VAL) >> 12) & 0xF) +#define OV9750_FETCH_2ND_BYTE_EXP(VAL) (((VAL) >> 4) & 0xFF) +#define OV9750_FETCH_1ST_BYTE_EXP(VAL) (((VAL) & 0x0F) << 4) + +#define OV9750_PIDH_ADDR 0x300B +#define OV9750_PIDL_ADDR 0x300C + +#define OV9750_PIDH_MAGIC 0x97 +#define OV9750_PIDL_MAGIC 0x50 + +#define OV9750_EXT_CLK 12000000 +#define OV9750_TIMING_VTS_HIGH_REG 0x380e +#define OV9750_TIMING_VTS_LOW_REG 0x380f +#define OV9750_TIMING_HTS_HIGH_REG 0x380c +#define OV9750_TIMING_HTS_LOW_REG 0x380d +#define OV9750_FINE_INTG_TIME_MIN 0 +#define OV9750_FINE_INTG_TIME_MAX_MARGIN 0 +#define OV9750_COARSE_INTG_TIME_MIN 1 +#define OV9750_COARSE_INTG_TIME_MAX_MARGIN 4 +#define OV9750_TIMING_X_INC 0x3814 +#define OV9750_TIMING_Y_INC 0x3815 +#define OV9750_HORIZONTAL_START_HIGH_REG 0x3800 +#define OV9750_HORIZONTAL_START_LOW_REG 0x3801 +#define OV9750_VERTICAL_START_HIGH_REG 0x3802 +#define OV9750_VERTICAL_START_LOW_REG 0x3803 +#define OV9750_HORIZONTAL_END_HIGH_REG 0x3804 +#define OV9750_HORIZONTAL_END_LOW_REG 0x3805 +#define OV9750_VERTICAL_END_HIGH_REG 0x3806 +#define OV9750_VERTICAL_END_LOW_REG 0x3807 +#define OV9750_HORIZONTAL_OUTPUT_SIZE_HIGH_REG 0x3808 +#define OV9750_HORIZONTAL_OUTPUT_SIZE_LOW_REG 0x3809 +#define OV9750_VERTICAL_OUTPUT_SIZE_HIGH_REG 0x380a +#define OV9750_VERTICAL_OUTPUT_SIZE_LOW_REG 0x380b +#define OV9750_H_WIN_OFF_HIGH_REG 0x3810 +#define OV9750_H_WIN_OFF_LOW_REG 0x3811 +#define OV9750_V_WIN_OFF_HIGH_REG 0x3812 +#define OV9750_V_WIN_OFF_LOW_REG 0x3813 + +static int cam_num; +static struct ov_camera_module ov9750[2]; + +/* ======================================================================== */ +/* Base sensor configs */ +/* ======================================================================== */ +/* 1280x960 2lane MCLK:24MHz 60fps 800Mbps/lane, MCLK:12Mhz 30fps 400Mbps/lane */ +static struct ov_camera_module_reg ov9750_init_tab_1280_960_30fps[] = { +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0103, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_TIMEOUT, 0x0000, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0100, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_TIMEOUT, 0x0000, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0300, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0302, 0x64}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0303, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0304, 0x03}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0305, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0306, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x030a, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x030b, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x030d, 0x1e}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x030e, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x030f, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0312, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x031e, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3000, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3001, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3002, 0x21}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3005, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3011, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3016, 0x53}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3018, 0x32}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301a, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301b, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301c, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301d, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301e, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3022, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3031, 0x0a}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3032, 0x80}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x303c, 0xff}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x303e, 0xff}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3040, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3041, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3042, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3104, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3106, 0x15}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3107, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3500, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3501, 0x38}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3502, 0x40}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3503, 0x08}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3504, 0x03}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3505, 0x83}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3508, 0x02}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3509, 0x80}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3600, 0x65}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3601, 0x60}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3602, 0x22}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3610, 0xe8}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3611, 0x5c}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3612, 0x18}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3613, 0x3a}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3614, 0x91}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3615, 0x79}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3617, 0x57}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3621, 0x90}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3622, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3623, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3633, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3634, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3635, 0x14}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3636, 0x14}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3650, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3652, 0xff}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3654, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3653, 0x34}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3655, 0x20}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3656, 0xff}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3657, 0xc4}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x365a, 0xff}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x365b, 0xff}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x365e, 0xff}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x365f, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3668, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x366a, 0x07}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x366d, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x366e, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3702, 0x1d}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3703, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3704, 0x14}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3705, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3706, 0x27}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3709, 0x24}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x370a, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x370b, 0x7d}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3714, 0x24}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x371a, 0x5e}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3730, 0x82}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3733, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x373e, 0x18}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3755, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3758, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x375b, 0x13}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3772, 0x23}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3773, 0x05}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3774, 0x16}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3775, 0x12}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3776, 0x08}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37a8, 0x38}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37b5, 0x36}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37c2, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37c5, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37c7, 0x31}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37c8, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37d1, 0x13}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3800, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3801, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3802, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3803, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3804, 0x05}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3805, 0x0f}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3806, 0x03}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3807, 0xcb}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3808, 0x05}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3809, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380a, 0x03}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380b, 0xc0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380c, 0x03},//hts +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380d, 0x2a}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380e, 0x03},//vts +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380f, 0xdc}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3810, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3811, 0x08}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3812, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3813, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3814, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3815, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3816, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3817, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3818, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3819, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3820, 0x80}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3821, 0x40}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3826, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3827, 0x08}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x382a, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x382b, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3836, 0x02}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3838, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3861, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3862, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3863, 0x02}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b00, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c00, 0x89}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c01, 0xab}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c02, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c03, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c04, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c05, 0x03}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c06, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c07, 0x05}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0c, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0d, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0e, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0f, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c40, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c41, 0xa3}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c43, 0x7d}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c56, 0x80}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c80, 0x08}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c82, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c83, 0x61}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3d85, 0x17}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3f08, 0x08}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3f0a, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3f0b, 0x30}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4000, 0xcd}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4003, 0x40}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4009, 0x0d}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4010, 0xf0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4011, 0x70}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4017, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4040, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4041, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4303, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4307, 0x30}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4500, 0x30}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4502, 0x40}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4503, 0x06}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4508, 0xaa}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x450b, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x450c, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4600, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4601, 0x80}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4700, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4704, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4705, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4837, 0x14}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x484a, 0x3f}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5000, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5001, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5002, 0x28}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5004, 0x0c}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5006, 0x0c}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5007, 0xe0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5008, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5009, 0xb0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x502a, 0x18}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5901, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a01, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a03, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a04, 0x0c}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a05, 0xe0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a06, 0x09}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a07, 0xb0}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a08, 0x06}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5e00, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5e10, 0xfc}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x300f, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3733, 0x10}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3610, 0xe8}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3611, 0x5c}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3635, 0x14}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3636, 0x14}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3620, 0x84}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3614, 0x96}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x481f, 0x30}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3788, 0x00}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3789, 0x04}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x378a, 0x01}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x378b, 0x60}, +{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3799, 0x27}, +}; + +/* ======================================================================== */ + +static struct ov_camera_module_config ov9750_configs[] = { + { + .name = "1280x960_30fps", + .frm_fmt = { + .width = 1280, + .height = 960, + .code = MEDIA_BUS_FMT_SBGGR10_1X10 + }, + .frm_intrvl = { + .interval = { + .numerator = 1, + .denominator = 30 + } + }, + .auto_exp_enabled = false, + .auto_gain_enabled = false, + .auto_wb_enabled = false, + .reg_table = (void *)ov9750_init_tab_1280_960_30fps, + .reg_table_num_entries = + ARRAY_SIZE(ov9750_init_tab_1280_960_30fps), + .v_blanking_time_us = 3078, + PLTFRM_CAM_ITF_MIPI_CFG(0, 2, 400, OV9750_EXT_CLK) + } +}; + +/*--------------------------------------------------------------------------*/ + +static int ov9750_dual_mode(struct ov_camera_module *cam_mod) +{ + if (cam_mod->as_master) { + ov_camera_module_write_reg(cam_mod, 0x3002, 0xa1); + ov_camera_module_write_reg(cam_mod, 0x3007, 0x02); + ov_camera_module_write_reg(cam_mod, 0x3816, 0x00); + ov_camera_module_write_reg(cam_mod, 0x3817, 0x00); + ov_camera_module_write_reg(cam_mod, 0x3818, 0x00); + ov_camera_module_write_reg(cam_mod, 0x3819, 0x01); + ov_camera_module_write_reg(cam_mod, 0x3823, 0x00); + ov_camera_module_write_reg(cam_mod, 0x3824, 0x00); + } else { + ov_camera_module_write_reg(cam_mod, 0x3002, 0x21); + ov_camera_module_write_reg(cam_mod, 0x3823, 0x48); + ov_camera_module_write_reg(cam_mod, 0x3824, 0x11); + } + return 0; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_set_flip(struct ov_camera_module *cam_mod, + struct pltfrm_camera_module_reg reglist[], + int len) +{ + int i, mode = 0; + u16 match_reg[3]; + + mode = ov_camera_module_get_flip_mirror(cam_mod); + + if (mode == -1) { + ov_camera_module_pr_debug(cam_mod, + "dts don't set flip, return!\n"); + return 0; + } + + if (mode == OV_FLIP_BIT_MASK) { + match_reg[0] = 0xc6; + match_reg[1] = 0x40; + match_reg[2] = 0x20; + } else if (mode == OV_MIRROR_BIT_MASK) { + match_reg[0] = 0x80; + match_reg[1] = 0x46; + match_reg[2] = 0x00; + } else if (mode == (OV_MIRROR_BIT_MASK | + OV_FLIP_BIT_MASK)) { + match_reg[0] = 0xc6; + match_reg[1] = 0x46; + match_reg[2] = 0x20; + } else { + match_reg[0] = 0x80; + match_reg[1] = 0x40; + match_reg[2] = 0x00; + } + + for (i = len; i > 0; i--) { + if (reglist[i].reg == 0x3820) + reglist[i].val = match_reg[0]; + else if (reglist[i].reg == 0x3821) + reglist[i].val = match_reg[1]; + else if (reglist[i].reg == 0x450b) + reglist[i].val = match_reg[2]; + } + + return 0; +} + +/*--------------------------------------------------------------------------*/ + +static int OV9750_g_VTS(struct ov_camera_module *cam_mod, u32 *vts) +{ + u32 msb, lsb; + int ret; + + ret = ov_camera_module_read_reg_table(cam_mod, + OV9750_TIMING_VTS_HIGH_REG, + &msb); + if (IS_ERR_VALUE(ret)) + goto err; + + ret = ov_camera_module_read_reg_table(cam_mod, + OV9750_TIMING_VTS_LOW_REG, + &lsb); + if (IS_ERR_VALUE(ret)) + goto err; + + *vts = (msb << 8) | lsb; + + return 0; +err: + ov_camera_module_pr_err(cam_mod, + "failed with error (%d)\n", ret); + return ret; +} + +static int OV9750_auto_adjust_fps(struct ov_camera_module *cam_mod, + u32 exp_time) +{ + int ret; + u32 vts; + + if ((cam_mod->exp_config.exp_time + OV9750_COARSE_INTG_TIME_MAX_MARGIN) + > cam_mod->vts_min) + vts = cam_mod->exp_config.exp_time + + OV9750_COARSE_INTG_TIME_MAX_MARGIN; + else + vts = cam_mod->vts_min; + + ret = ov_camera_module_write_reg(cam_mod, + OV9750_TIMING_VTS_LOW_REG, + vts & 0xFF); + ret |= ov_camera_module_write_reg(cam_mod, + OV9750_TIMING_VTS_HIGH_REG, + (vts >> 8) & 0x0F); + + if (IS_ERR_VALUE(ret)) { + ov_camera_module_pr_err(cam_mod, + "failed with error (%d)\n", ret); + } else { + ov_camera_module_pr_info(cam_mod, + "updated vts = 0x%x,vts_min=0x%x\n", + vts, cam_mod->vts_min); + cam_mod->vts_cur = vts; + } + + return ret; +} + +static int ov9750_set_vts(struct ov_camera_module *cam_mod, + u32 vts) +{ + int ret = 0; + + if (vts <= cam_mod->vts_min) + return ret; + + ret = ov_camera_module_write_reg(cam_mod, + OV9750_TIMING_VTS_LOW_REG, + vts & 0xFF); + ret |= ov_camera_module_write_reg(cam_mod, + OV9750_TIMING_VTS_HIGH_REG, + (vts >> 8) & 0x0F); + + if (IS_ERR_VALUE(ret)) { + ov_camera_module_pr_err(cam_mod, + "failed with error (%d)\n", ret); + } else { + ov_camera_module_pr_info(cam_mod, + "updated vts = 0x%x,vts_min=0x%x\n", + vts, cam_mod->vts_min); + cam_mod->vts_cur = vts; + } + return ret; +} + +static int ov9750_write_aec(struct ov_camera_module *cam_mod) +{ + int ret = 0; + + ov_camera_module_pr_debug(cam_mod, + "exp_time = %d lines, gain = %d, flash_mode = %d\n", + cam_mod->exp_config.exp_time, + cam_mod->exp_config.gain, + cam_mod->exp_config.flash_mode); + + /* + * if the sensor is already streaming, write to shadow registers, + * if the sensor is in SW standby, write to active registers, + * if the sensor is off/registers are not writeable, do nothing + */ + if (cam_mod->state == OV_CAMERA_MODULE_SW_STANDBY || + cam_mod->state == OV_CAMERA_MODULE_STREAMING) { + u32 a_gain = cam_mod->exp_config.gain; + u32 exp_time = cam_mod->exp_config.exp_time; + + a_gain = a_gain * cam_mod->exp_config.gain_percent / 100; + if (a_gain < 0x80) + a_gain = 0x80; + if (a_gain > 0x7c0) + a_gain = 0x7c0; + if (exp_time < 4) + exp_time = 4; + + if (cam_mod->state == OV_CAMERA_MODULE_STREAMING) + ret = ov_camera_module_write_reg(cam_mod, + OV9750_AEC_GROUP_UPDATE_ADDRESS, + OV9750_AEC_GROUP_UPDATE_START_DATA); + if (!IS_ERR_VALUE(ret) && cam_mod->auto_adjust_fps) + ret = OV9750_auto_adjust_fps(cam_mod, + cam_mod->exp_config.exp_time); + ret |= ov_camera_module_write_reg(cam_mod, + OV9750_AEC_PK_LONG_GAIN_HIGH_REG, + OV9750_FETCH_MSB_GAIN(a_gain)); + ret |= ov_camera_module_write_reg(cam_mod, + OV9750_AEC_PK_LONG_GAIN_LOW_REG, + OV9750_FETCH_LSB_GAIN(a_gain)); + ret |= ov_camera_module_write_reg(cam_mod, + OV9750_AEC_PK_LONG_EXPO_3RD_REG, + OV9750_FETCH_3RD_BYTE_EXP(exp_time)); + ret |= ov_camera_module_write_reg(cam_mod, + OV9750_AEC_PK_LONG_EXPO_2ND_REG, + OV9750_FETCH_2ND_BYTE_EXP(exp_time)); + ret |= ov_camera_module_write_reg(cam_mod, + OV9750_AEC_PK_LONG_EXPO_1ST_REG, + OV9750_FETCH_1ST_BYTE_EXP(exp_time)); + + if (!cam_mod->auto_adjust_fps) + ret |= ov9750_set_vts(cam_mod, cam_mod->exp_config.vts_value); + + if (cam_mod->state == OV_CAMERA_MODULE_STREAMING) { + ret = ov_camera_module_write_reg(cam_mod, + OV9750_AEC_GROUP_UPDATE_ADDRESS, + OV9750_AEC_GROUP_UPDATE_END_DATA); + ret = ov_camera_module_write_reg(cam_mod, + OV9750_AEC_GROUP_UPDATE_ADDRESS, + OV9750_AEC_GROUP_UPDATE_END_LAUNCH); + } + } + + if (IS_ERR_VALUE(ret)) + ov_camera_module_pr_err(cam_mod, + "failed with error (%d)\n", ret); + return ret; +} + +static int ov9750_g_ctrl(struct ov_camera_module *cam_mod, u32 ctrl_id) +{ + int ret = 0; + + ov_camera_module_pr_debug(cam_mod, "\n"); + + switch (ctrl_id) { + case V4L2_CID_GAIN: + case V4L2_CID_EXPOSURE: + case V4L2_CID_FLASH_LED_MODE: + /* nothing to be done here */ + break; + default: + ret = -EINVAL; + break; + } + + if (IS_ERR_VALUE(ret)) + ov_camera_module_pr_debug(cam_mod, + "failed with error (%d)\n", ret); + return ret; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_filltimings(struct ov_camera_module_custom_config *custom) +{ + u32 i, j; + u32 win_h_off = 0, win_v_off = 0; + struct ov_camera_module_config *config; + struct ov_camera_module_timings *timings; + struct ov_camera_module_reg *reg_table; + u32 reg_table_num_entries; + + for (i = 0; i < custom->num_configs; i++) { + config = &custom->configs[i]; + reg_table = config->reg_table; + reg_table_num_entries = config->reg_table_num_entries; + timings = &config->timings; + + memset(timings, 0x00, sizeof(*timings)); + for (j = 0; j < reg_table_num_entries; j++) { + switch (reg_table[j].reg) { + case OV9750_TIMING_VTS_HIGH_REG: + timings->frame_length_lines = + ((reg_table[j].val << 8) | + (timings->frame_length_lines & 0xff)); + break; + case OV9750_TIMING_VTS_LOW_REG: + timings->frame_length_lines = + (reg_table[j].val | + (timings->frame_length_lines & 0xff00)); + break; + case OV9750_TIMING_HTS_HIGH_REG: + timings->line_length_pck = + ((reg_table[j].val << 8) | + timings->line_length_pck); + break; + case OV9750_TIMING_HTS_LOW_REG: + timings->line_length_pck = + (reg_table[j].val | + (timings->line_length_pck & 0xff00)); + break; + case OV9750_TIMING_X_INC: + timings->binning_factor_x = + ((reg_table[j].val >> 4) + 1) / 2; + if (timings->binning_factor_x == 0) + timings->binning_factor_x = 1; + break; + case OV9750_TIMING_Y_INC: + timings->binning_factor_y = + ((reg_table[j].val >> 4) + 1) / 2; + if (timings->binning_factor_y == 0) + timings->binning_factor_y = 1; + break; + case OV9750_HORIZONTAL_START_HIGH_REG: + timings->crop_horizontal_start = + ((reg_table[j].val << 8) | + (timings->crop_horizontal_start & + 0xff)); + break; + case OV9750_HORIZONTAL_START_LOW_REG: + timings->crop_horizontal_start = + (reg_table[j].val | + (timings->crop_horizontal_start & + 0xff00)); + break; + case OV9750_VERTICAL_START_HIGH_REG: + timings->crop_vertical_start = + ((reg_table[j].val << 8) | + (timings->crop_vertical_start & 0xff)); + break; + case OV9750_VERTICAL_START_LOW_REG: + timings->crop_vertical_start = + ((reg_table[j].val) | + (timings->crop_vertical_start & + 0xff00)); + break; + case OV9750_HORIZONTAL_END_HIGH_REG: + timings->crop_horizontal_end = + ((reg_table[j].val << 8) | + (timings->crop_horizontal_end & 0xff)); + break; + case OV9750_HORIZONTAL_END_LOW_REG: + timings->crop_horizontal_end = + (reg_table[j].val | + (timings->crop_horizontal_end & + 0xff00)); + break; + case OV9750_VERTICAL_END_HIGH_REG: + timings->crop_vertical_end = + ((reg_table[j].val << 8) | + (timings->crop_vertical_end & 0xff)); + break; + case OV9750_VERTICAL_END_LOW_REG: + timings->crop_vertical_end = + (reg_table[j].val | + (timings->crop_vertical_end & 0xff00)); + break; + case OV9750_H_WIN_OFF_HIGH_REG: + win_h_off = (reg_table[j].val & 0xf) << 8; + break; + case OV9750_H_WIN_OFF_LOW_REG: + win_h_off |= (reg_table[j].val & 0xff); + break; + case OV9750_V_WIN_OFF_HIGH_REG: + win_v_off = (reg_table[j].val & 0xf) << 8; + break; + case OV9750_V_WIN_OFF_LOW_REG: + win_v_off |= (reg_table[j].val & 0xff); + break; + case OV9750_HORIZONTAL_OUTPUT_SIZE_HIGH_REG: + timings->sensor_output_width = + ((reg_table[j].val << 8) | + (timings->sensor_output_width & 0xff)); + break; + case OV9750_HORIZONTAL_OUTPUT_SIZE_LOW_REG: + timings->sensor_output_width = + (reg_table[j].val | + (timings->sensor_output_width & + 0xff00)); + break; + case OV9750_VERTICAL_OUTPUT_SIZE_HIGH_REG: + timings->sensor_output_height = + ((reg_table[j].val << 8) | + (timings->sensor_output_height & 0xff)); + break; + case OV9750_VERTICAL_OUTPUT_SIZE_LOW_REG: + timings->sensor_output_height = + (reg_table[j].val | + (timings->sensor_output_height & + 0xff00)); + break; + } + } + + timings->crop_horizontal_start += win_h_off; + timings->crop_horizontal_end -= win_h_off; + timings->crop_vertical_start += win_v_off; + timings->crop_vertical_end -= win_v_off; + + timings->exp_time >>= 4; + timings->vt_pix_clk_freq_hz = + config->frm_intrvl.interval.denominator * + timings->frame_length_lines * + timings->line_length_pck; + + timings->coarse_integration_time_min = + OV9750_COARSE_INTG_TIME_MIN; + timings->coarse_integration_time_max_margin = + OV9750_COARSE_INTG_TIME_MAX_MARGIN; + + /* OV Sensor do not use fine integration time. */ + timings->fine_integration_time_min = + OV9750_FINE_INTG_TIME_MIN; + timings->fine_integration_time_max_margin = + OV9750_FINE_INTG_TIME_MAX_MARGIN; + } + + return 0; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_g_timings(struct ov_camera_module *cam_mod, + struct ov_camera_module_timings *timings) +{ + int ret = 0; + unsigned int vts; + + if (IS_ERR_OR_NULL(cam_mod->active_config)) + goto err; + + *timings = cam_mod->active_config->timings; + + vts = (!cam_mod->vts_cur) ? + timings->frame_length_lines : + cam_mod->vts_cur; + if (cam_mod->frm_intrvl_valid) + timings->vt_pix_clk_freq_hz = + cam_mod->frm_intrvl.interval.denominator + * vts + * timings->line_length_pck; + else + timings->vt_pix_clk_freq_hz = + cam_mod->active_config->frm_intrvl.interval.denominator + * vts + * timings->line_length_pck; + return ret; +err: + ov_camera_module_pr_err(cam_mod, + "failed with error (%d)\n", ret); + return ret; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_s_ctrl(struct ov_camera_module *cam_mod, u32 ctrl_id) +{ + int ret = 0; + + ov_camera_module_pr_debug(cam_mod, "\n"); + + switch (ctrl_id) { + case V4L2_CID_GAIN: + case V4L2_CID_EXPOSURE: + ret = ov9750_write_aec(cam_mod); + break; + case V4L2_CID_FLASH_LED_MODE: + /* nothing to be done here */ + break; + case V4L2_CID_FOCUS_ABSOLUTE: + /* todo*/ + break; + /* + * case RK_V4L2_CID_FPS_CTRL: + * if (cam_mod->auto_adjust_fps) + * ret = OV9750_auto_adjust_fps( + * cam_mod, + * cam_mod->exp_config.exp_time); + * break; + */ + default: + ret = -EINVAL; + break; + } + + if (IS_ERR_VALUE(ret)) + ov_camera_module_pr_err(cam_mod, + "failed with error (%d)\n", ret); + return ret; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_s_ext_ctrls(struct ov_camera_module *cam_mod, + struct ov_camera_module_ext_ctrls *ctrls) +{ + int ret = 0; + + /* Handles only exposure and gain together special case. */ + if (ctrls->count == 1) + ret = ov9750_s_ctrl(cam_mod, ctrls->ctrls[0].id); + else if ((ctrls->count >= 3) && + (ctrls->ctrls[0].id == V4L2_CID_GAIN || + ctrls->ctrls[0].id == V4L2_CID_EXPOSURE || + ctrls->ctrls[1].id == V4L2_CID_GAIN || + ctrls->ctrls[1].id == V4L2_CID_EXPOSURE)) + ret = ov9750_write_aec(cam_mod); + else + ret = -EINVAL; + + if (IS_ERR_VALUE(ret)) + ov_camera_module_pr_debug(cam_mod, + "failed with error (%d)\n", ret); + + return ret; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_start_streaming(struct ov_camera_module *cam_mod) +{ + int ret = 0; + + ov_camera_module_pr_info(cam_mod, + "active config=%s\n", + cam_mod->active_config->name); + + ov9750_dual_mode(cam_mod); + + ret = OV9750_g_VTS(cam_mod, &cam_mod->vts_min); + if (IS_ERR_VALUE(ret)) + goto err; + ret = ov_camera_module_write_reg(cam_mod, 0x0100, 0x01); + if (IS_ERR_VALUE(ret)) + goto err; + + msleep(25); + return 0; +err: + ov_camera_module_pr_err(cam_mod, "failed with error (%d)\n", + ret); + return ret; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_stop_streaming(struct ov_camera_module *cam_mod) +{ + int ret = 0; + + ov_camera_module_pr_info(cam_mod, "\n"); + ret = ov_camera_module_write_reg(cam_mod, 0x0100, 0x00); + if (IS_ERR_VALUE(ret)) + goto err; + + msleep(25); + return 0; +err: + ov_camera_module_pr_err(cam_mod, "failed with error (%d)\n", ret); + return ret; +} + +/*--------------------------------------------------------------------------*/ + +static int ov9750_check_camera_id(struct ov_camera_module *cam_mod) +{ + u32 pidh, pidl; + int ret = 0; + + ov_camera_module_pr_debug(cam_mod, "\n"); + + ret |= ov_camera_module_read_reg(cam_mod, 1, OV9750_PIDH_ADDR, &pidh); + ret |= ov_camera_module_read_reg(cam_mod, 1, OV9750_PIDL_ADDR, &pidl); + + if (IS_ERR_VALUE(ret)) { + ov_camera_module_pr_err(cam_mod, + "register read failed, camera module powered off?\n"); + goto err; + } + + if (pidh == OV9750_PIDH_MAGIC && pidl == OV9750_PIDL_MAGIC) { + ov_camera_module_pr_info(cam_mod, + "successfully detected camera ID 0x%02x%02x\n", + pidh, pidl); + } else { + ov_camera_module_pr_err(cam_mod, + "wrong camera ID, expected 0x%02x%02x, detected 0x%02x%02x\n", + OV9750_PIDH_MAGIC, OV9750_PIDL_MAGIC, pidh, pidl); + ret = -EINVAL; + goto err; + } + + return 0; +err: + ov_camera_module_pr_err(cam_mod, "failed with error (%d)\n", ret); + return ret; +} + +/* ======================================================================== */ +/* This part is platform dependent */ +/* ======================================================================== */ + +static struct v4l2_subdev_core_ops ov9750_camera_module_core_ops = { + .g_ctrl = ov_camera_module_g_ctrl, + .s_ctrl = ov_camera_module_s_ctrl, + .s_ext_ctrls = ov_camera_module_s_ext_ctrls, + .s_power = ov_camera_module_s_power, + .ioctl = ov_camera_module_ioctl +}; + +static struct v4l2_subdev_video_ops ov9750_camera_module_video_ops = { + .s_frame_interval = ov_camera_module_s_frame_interval, + .s_stream = ov_camera_module_s_stream +}; + +static struct v4l2_subdev_pad_ops ov9750_camera_module_pad_ops = { + .enum_frame_interval = ov_camera_module_enum_frameintervals, + .get_fmt = ov_camera_module_g_fmt, + .set_fmt = ov_camera_module_s_fmt, +}; + +static struct v4l2_subdev_ops ov9750_camera_module_ops = { + .core = &ov9750_camera_module_core_ops, + .video = &ov9750_camera_module_video_ops, + .pad = &ov9750_camera_module_pad_ops +}; + +static struct ov_camera_module_custom_config ov9750_custom_config = { + .start_streaming = ov9750_start_streaming, + .stop_streaming = ov9750_stop_streaming, + .s_ctrl = ov9750_s_ctrl, + .g_ctrl = ov9750_g_ctrl, + .s_ext_ctrls = ov9750_s_ext_ctrls, + .g_timings = ov9750_g_timings, + .set_flip = ov9750_set_flip, + .check_camera_id = ov9750_check_camera_id, + .configs = ov9750_configs, + .num_configs = ARRAY_SIZE(ov9750_configs), + .power_up_delays_ms = {5, 30, 30} +}; + +static int ov9750_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + int ret = 0; + struct device_node *np = of_node_get(client->dev.of_node); + + dev_info(&client->dev, "probing cam_num:%d 0x%x\n", + cam_num, client->addr); + + ov9750_filltimings(&ov9750_custom_config); + v4l2_i2c_subdev_init(&ov9750[cam_num].sd, client, + &ov9750_camera_module_ops); + + ov9750[cam_num].custom = ov9750_custom_config; + + of_property_read_u32(np, "as-master", &ret); + ov9750[cam_num].as_master = (ret == 0) ? false : true; + cam_num++; + + dev_info(&client->dev, "probing successful\n"); + return 0; +} + +/* ======================================================================== */ + +static int ov9750_remove(struct i2c_client *client) +{ + struct ov_camera_module *cam_mod = i2c_get_clientdata(client); + + dev_info(&client->dev, "removing device...\n"); + + if (!client->adapter) + return -ENODEV; + + ov_camera_module_release(cam_mod); + + dev_info(&client->dev, "removed\n"); + return 0; +} + +static const struct i2c_device_id ov9750_id[] = { + { OV9750_DRIVER_NAME, 0 }, + { } +}; + +static const struct of_device_id ov9750_of_match[] = { + {.compatible = "omnivision,ov9750-v4l2-i2c-subdev"}, + {}, +}; + +MODULE_DEVICE_TABLE(i2c, ov9750_id); + +static struct i2c_driver ov9750_i2c_driver = { + .driver = { + .name = OV9750_DRIVER_NAME, + .of_match_table = ov9750_of_match + }, + .probe = ov9750_probe, + .remove = ov9750_remove, + .id_table = ov9750_id, +}; + +module_i2c_driver(ov9750_i2c_driver); + +MODULE_DESCRIPTION("SoC Camera driver for ov9750"); +MODULE_AUTHOR("Cain"); +MODULE_LICENSE("GPL"); diff --git a/drivers/media/i2c/soc_camera/rockchip/ov_camera_module.h b/drivers/media/i2c/soc_camera/rockchip/ov_camera_module.h index 25af7f037c985..ffce8134fbb23 100644 --- a/drivers/media/i2c/soc_camera/rockchip/ov_camera_module.h +++ b/drivers/media/i2c/soc_camera/rockchip/ov_camera_module.h @@ -200,6 +200,7 @@ struct ov_camera_module { u32 rotation; void *pltfm_data; bool inited; + bool as_master; }; #define ov_camera_module_pr_info(cam_mod, fmt, arg...) \ From d659315a26ad510ad9dce5a19befa298bc529415 Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Thu, 5 Jul 2018 15:38:16 +0800 Subject: [PATCH 0083/1852] ASoC: rk3308_codec: put switch BIST early during enable ADCs Fix the negative data before enabling loopback. Change-Id: I8f4ef1e83b38f17c80f9b4109984c6560e570d20 Signed-off-by: Xing Zheng --- sound/soc/codecs/rk3308_codec.c | 61 ++++++++++++++++----------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c index 77897f00196ef..b7e68360624b4 100644 --- a/sound/soc/codecs/rk3308_codec.c +++ b/sound/soc/codecs/rk3308_codec.c @@ -975,30 +975,6 @@ static int rk3308_mute_stream(struct snd_soc_dai *dai, int mute, int stream) #endif } else { #if !DEBUG_POP_ALWAYS - if (has_loopback(rk3308->loopback_grp) && - (rk3308->dac_output == DAC_LINEOUT)) { - int type = ADC_TYPE_LOOPBACK; - int idx, grp; - - /* - * Switch to dummy BIST mode (BIST keep reset - * now) to keep the zero input data in I2S bus. - * - * It may cause the glitch if we hold the ADC - * digtital i2s module in codec. - */ - for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { - regmap_update_bits(rk3308->regmap, - RK3308_ADC_DIG_CON03(grp), - RK3308_ADC_L_CH_BIST_MSK, - RK3308_ADC_L_CH_BIST_SINE); - regmap_update_bits(rk3308->regmap, - RK3308_ADC_DIG_CON03(grp), - RK3308_ADC_R_CH_BIST_MSK, - RK3308_ADC_R_CH_BIST_SINE); - } - } - if (rk3308->dac_output == DAC_LINEOUT) rk3308_speaker_ctl(rk3308, 1); else if (rk3308->dac_output == DAC_HPOUT) @@ -2535,14 +2511,35 @@ static int rk3308_codec_open_capture(struct rk3308_codec_priv *rk3308) RK3308_ADC_R_CH_NORMAL_LEFT); } else { for (idx = 0; adc_for_each_grp(rk3308, type, idx, &grp); idx++) { - regmap_update_bits(rk3308->regmap, - RK3308_ADC_DIG_CON03(grp), - RK3308_ADC_L_CH_BIST_MSK, - RK3308_ADC_L_CH_NORMAL_LEFT); - regmap_update_bits(rk3308->regmap, - RK3308_ADC_DIG_CON03(grp), - RK3308_ADC_R_CH_BIST_MSK, - RK3308_ADC_R_CH_NORMAL_RIGHT); + if (has_loopback(rk3308->loopback_grp) && + grp == ADC_GRP_SKIP_MAGIC) { + /* + * Switch to dummy BIST mode (BIST keep reset + * now) to keep the zero input data in I2S bus. + * + * It may cause the glitch if we hold the ADC + * digtital i2s module in codec. + * + * Then, the grp which is set from loopback_grp. + */ + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(rk3308->loopback_grp), + RK3308_ADC_L_CH_BIST_MSK, + RK3308_ADC_L_CH_BIST_SINE); + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(rk3308->loopback_grp), + RK3308_ADC_R_CH_BIST_MSK, + RK3308_ADC_R_CH_BIST_SINE); + } else { + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_L_CH_BIST_MSK, + RK3308_ADC_L_CH_NORMAL_LEFT); + regmap_update_bits(rk3308->regmap, + RK3308_ADC_DIG_CON03(grp), + RK3308_ADC_R_CH_BIST_MSK, + RK3308_ADC_R_CH_NORMAL_RIGHT); + } } } From 061393017cc1aa634bbd341fcce60b6594a01d36 Mon Sep 17 00:00:00 2001 From: Yifeng Zhao Date: Wed, 4 Jul 2018 18:12:22 +0800 Subject: [PATCH 0084/1852] drivers: rk_nand: fix 2cs 3d mlc nand gc fail issue bug: 1ppa = 2212a00, status = 0, 2d1db 2bc05 spare: 3a20ea 2d1dc 22bc05 0 1ppa = 2212a00, status = 1, 3b8ef 25fe52 spare: 3a6bfa 3c5d6 5fe53 2 1ppa = 2212a00, status = 0, 2d1db 2bc05 spare: 3a20ea 2d1dc 22bc05 0 1ppa = 2212a00, status = 1, 3b8ef 25fe52 spare: 3a6bfa 3c5d6 5fe53 2 Change-Id: I04fd61716bf12dfdd8afc0eb2f1a099c631119dc Signed-off-by: Yifeng Zhao --- drivers/rk_nand/rk_ftl_arm_v7.S | 20597 +++++++++++++++-------------- drivers/rk_nand/rk_ftlv5_arm64.S | 9956 +++++++------- drivers/rk_nand/rk_zftl_arm64.S | 5067 +++---- 3 files changed, 18740 insertions(+), 16880 deletions(-) diff --git a/drivers/rk_nand/rk_ftl_arm_v7.S b/drivers/rk_nand/rk_ftl_arm_v7.S index 48e6735fedd7a..221ec458b70e5 100644 --- a/drivers/rk_nand/rk_ftl_arm_v7.S +++ b/drivers/rk_nand/rk_ftl_arm_v7.S @@ -5,7 +5,7 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * date: 2018-05-30 + * date: 2018-07-03 */ .arch armv7-a .fpu softvfp @@ -20,8 +20,8 @@ .file "rk_ftl_arm_v7.S" .text .align 2 - .type FlashGetReadRetryDefault.part.25, %function -FlashGetReadRetryDefault.part.25: + .type FlashGetReadRetryDefault.part.27, %function +FlashGetReadRetryDefault.part.27: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @@ -75,7 +75,7 @@ FlashGetReadRetryDefault.part.25: .word .LANCHOR1 .word .LANCHOR1+45 .fnend - .size FlashGetReadRetryDefault.part.25, .-FlashGetReadRetryDefault.part.25 + .size FlashGetReadRetryDefault.part.27, .-FlashGetReadRetryDefault.part.27 .align 2 .global FlashMemCmp8 .type FlashMemCmp8, %function @@ -1468,6 +1468,42 @@ FlashEraseSLc2KBlocks: .fnend .size FlashEraseSLc2KBlocks, .-FlashEraseSLc2KBlocks .align 2 + .global micron_auto_read_calibration_config + .type micron_auto_read_calibration_config, %function +micron_auto_read_calibration_config: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} + mov r6, r1 + mov r4, r0 + bl NandcWaitFlashReady + ldr r3, .L206 + mov r2, #239 + mov r0, #200 + add r4, r3, r4, asl #3 + ldr r5, [r4, #864] + ldrb r4, [r4, #868] @ zero_extendqisi2 + add r4, r4, #8 + add r3, r5, r4, asl #8 + str r2, [r3, #8] + mov r2, #150 + str r2, [r3, #4] + bl NandcDelayns + str r6, [r5, r4, asl #8] + mov r3, #0 + str r3, [r5, r4, asl #8] + str r3, [r5, r4, asl #8] + str r3, [r5, r4, asl #8] + ldmfd sp!, {r4, r5, r6, pc} +.L207: + .align 2 +.L206: + .word .LANCHOR0 + .fnend + .size micron_auto_read_calibration_config, .-micron_auto_read_calibration_config + .align 2 .global SandiskSetRRPara .type SandiskSetRRPara, %function SandiskSetRRPara: @@ -1484,17 +1520,17 @@ SandiskSetRRPara: mov r0, #200 mov r5, r1 bl NandcDelayns - ldr r1, .L211 + ldr r1, .L214 add r3, r5, r5, asl #2 mvn r6, #4 add r0, r1, r3 add r1, r1, #45 add r1, r1, r3 mov r2, #0 - ldr ip, .L211+4 + ldr ip, .L214+4 mul r5, r6, r5 - b .L206 -.L209: + b .L209 +.L212: ldrb r6, [ip, #3761] @ zero_extendqisi2 add r2, r2, #1 cmp r6, #67 @@ -1505,16 +1541,16 @@ SandiskSetRRPara: add r1, r1, #1 ldrsb r6, [r6, #5] str r6, [r4, #0] -.L206: +.L209: ldrb r6, [ip, #3760] @ zero_extendqisi2 cmp r2, r6 - bcc .L209 + bcc .L212 mov r0, #0 ldmfd sp!, {r4, r5, r6, lr} b NandcWaitFlashReady -.L212: +.L215: .align 2 -.L211: +.L214: .word .LANCHOR1 .word .LANCHOR0 .fnend @@ -1526,7 +1562,7 @@ SandiskProgTestBadBlock: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L214 + ldr r3, .L217 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} add r3, r3, r0, asl #3 @@ -1557,9 +1593,9 @@ SandiskProgTestBadBlock: ldr r0, [r5, r6, asl #8] and r0, r0, #1 ldmfd sp!, {r4, r5, r6, pc} -.L215: +.L218: .align 2 -.L214: +.L217: .word .LANCHOR0 .fnend .size SandiskProgTestBadBlock, .-SandiskProgTestBadBlock @@ -1570,13 +1606,13 @@ FlashReadSpare: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L217 + ldr r3, .L220 mov ip, #0 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} mov r6, r2 ldrb r2, [r3, #2901] @ zero_extendqisi2 - ldr r3, .L217+4 + ldr r3, .L220+4 add r3, r3, r0, asl #3 mov r2, r2, asl #9 ldrb r5, [r3, #868] @ zero_extendqisi2 @@ -1599,9 +1635,9 @@ FlashReadSpare: ldr r3, [r4, r5, asl #8] strb r3, [r6, #0] ldmfd sp!, {r4, r5, r6, pc} -.L218: +.L221: .align 2 -.L217: +.L220: .word .LANCHOR1 .word .LANCHOR0 .fnend @@ -1647,7 +1683,7 @@ FlashReset: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r4, r0 - ldr r3, .L221 + ldr r3, .L224 add r3, r3, r0, asl #3 ldrb r5, [r3, #868] @ zero_extendqisi2 ldr r2, [r3, #864] @@ -1661,9 +1697,9 @@ FlashReset: mov r0, r4 ldmfd sp!, {r3, r4, r5, lr} b NandcFlashDeCs -.L222: +.L225: .align 2 -.L221: +.L224: .word .LANCHOR0 .fnend .size FlashReset, .-FlashReset @@ -1678,7 +1714,7 @@ FlashReadIDRaw: mov r5, r1 mov r4, r0 bl FlashReset - ldr r3, .L225 + ldr r3, .L228 mov r0, r4 add r3, r3, r4, asl #3 ldrb r7, [r3, #868] @ zero_extendqisi2 @@ -1710,10 +1746,10 @@ FlashReadIDRaw: sub r3, r2, #1 uxtb r3, r3 cmp r3, #253 - bhi .L223 + bhi .L226 ldrb r1, [r5, #2] @ zero_extendqisi2 ldrb r3, [r5, #1] @ zero_extendqisi2 - ldr r0, .L225+4 + ldr r0, .L228+4 str r1, [sp, #0] ldrb r1, [r5, #3] @ zero_extendqisi2 str r1, [sp, #4] @@ -1723,11 +1759,11 @@ FlashReadIDRaw: str r1, [sp, #12] add r1, r4, #1 bl printk -.L223: - ldmfd sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, pc} .L226: + ldmfd sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, pc} +.L229: .align 2 -.L225: +.L228: .word .LANCHOR0 .word .LC2 .fnend @@ -1742,14 +1778,14 @@ FlashSetInterfaceMode: stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r4, #0 - ldr sl, .L241 + ldr sl, .L244 mov r7, #239 - ldr r9, .L241+4 + ldr r9, .L244+4 mov r1, r4 sub r8, sl, #864 mov r6, #128 mov r5, #1 -.L237: +.L240: mov r2, sl ldrb lr, [r4, r9] @ zero_extendqisi2 ldr r3, [r2, r4]! @@ -1758,60 +1794,60 @@ FlashSetInterfaceMode: ldrb r2, [r2, #4] @ zero_extendqisi2 add r2, r2, #8 add ip, r3, r2, asl #8 - beq .L228 + beq .L231 cmp lr, #173 cmpne lr, #44 - bne .L229 -.L228: + bne .L232 +.L231: cmp r0, #1 ldrb fp, [r8, #3772] @ zero_extendqisi2 - bne .L230 + bne .L233 tst fp, #1 - beq .L229 + beq .L232 cmp lr, #173 str r7, [ip, #8] streq r0, [ip, #4] - beq .L240 + beq .L243 cmp lr, #44 streq r0, [ip, #4] strne r6, [ip, #4] moveq ip, #5 strne r0, [r3, r2, asl #8] - bne .L235 - b .L239 -.L230: + bne .L238 + b .L242 +.L233: tst fp, #4 - beq .L229 + beq .L232 cmp lr, #173 str r7, [ip, #8] streq r5, [ip, #4] moveq ip, #32 - beq .L239 + beq .L242 cmp lr, #44 strne r6, [ip, #4] - bne .L240 + bne .L243 str r5, [ip, #4] mov ip, #35 -.L239: +.L242: str ip, [r3, r2, asl #8] - b .L235 -.L240: + b .L238 +.L243: str r1, [r3, r2, asl #8] -.L235: +.L238: str r1, [r3, r2, asl #8] str r1, [r3, r2, asl #8] str r1, [r3, r2, asl #8] -.L229: +.L232: add r4, r4, #8 cmp r4, #32 - bne .L237 + bne .L240 mov r0, #0 bl NandcWaitFlashReady mov r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L242: +.L245: .align 2 -.L241: +.L244: .word .LANCHOR0+864 .word .LANCHOR0+2980 .fnend @@ -1826,37 +1862,37 @@ ftl_flash_de_init: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r0, #0 - ldr r4, .L246 + ldr r4, .L249 bl NandcWaitFlashReady bl FlashSetReadRetryDefault - ldr r3, .L246+4 + ldr r3, .L249+4 ldr r2, [r4, #3776] cmp r2, r3 - bne .L244 + bne .L247 mov r0, #0 bl flash_enter_slc_mode -.L244: +.L247: ldrb r3, [r4, #3780] @ zero_extendqisi2 - ldr r5, .L246 + ldr r5, .L249 cmp r3, #0 - beq .L245 + beq .L248 ldrb r3, [r5, #3772] @ zero_extendqisi2 tst r3, #1 - beq .L245 + beq .L248 mov r0, #1 bl FlashSetInterfaceMode mov r0, #1 bl NandcSetMode mov r3, #0 strb r3, [r5, #3780] -.L245: +.L248: ldr r3, [r4, #864] mov r0, #0 str r0, [r3, #336] ldmfd sp!, {r3, r4, r5, pc} -.L247: +.L250: .align 2 -.L246: +.L249: .word .LANCHOR0 .word 1446522928 .fnend @@ -1868,7 +1904,7 @@ FlashReadDpCmd: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L252 + ldr r3, .L255 stmfd sp!, {r4, r5, r6, r7, r8, lr} .save {r4, r5, r6, r7, r8, lr} mov r7, r2 @@ -1883,7 +1919,7 @@ FlashReadDpCmd: ldrb r2, [r3, #904] @ zero_extendqisi2 add r6, r1, r6, asl #8 str r2, [r6, #8] - bne .L249 + bne .L252 mov r8, #0 uxtb r2, r5 str r8, [r6, #4] @@ -1899,8 +1935,8 @@ FlashReadDpCmd: str r8, [r6, #8] str r8, [r6, #4] str r8, [r6, #4] - b .L251 -.L249: + b .L254 +.L252: uxtb r2, r5 str r2, [r6, #4] mov r2, r5, lsr #8 @@ -1909,7 +1945,7 @@ FlashReadDpCmd: str r2, [r6, #4] ldrb r3, [r3, #905] @ zero_extendqisi2 str r3, [r6, #8] -.L251: +.L254: uxtb r3, r7 mov r0, r4 str r3, [r6, #4] @@ -1922,9 +1958,9 @@ FlashReadDpCmd: str r3, [r6, #8] ldmfd sp!, {r4, r5, r6, r7, r8, lr} b FlashSetRandomizer -.L253: +.L256: .align 2 -.L252: +.L255: .word .LANCHOR0 .fnend .size FlashReadDpCmd, .-FlashReadDpCmd @@ -1936,14 +1972,14 @@ NandcRandmzSel: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L255 + ldr r3, .L258 add r3, r3, r0, asl #3 ldr r3, [r3, #864] str r1, [r3, #336] bx lr -.L256: +.L259: .align 2 -.L255: +.L258: .word .LANCHOR0 .fnend .size NandcRandmzSel, .-NandcRandmzSel @@ -1960,36 +1996,36 @@ NandcTimeCfg: mov r4, r0 mov r0, #0 bl rknand_get_clk_rate - ldr r1, .L267 + ldr r1, .L270 bl __aeabi_idiv - ldr r3, .L267+4 + ldr r3, .L270+4 ldr r3, [r3, #3012] cmp r0, #250 movwgt r2, #8354 - bgt .L265 + bgt .L268 cmp r0, #220 - bgt .L266 -.L260: + bgt .L269 +.L263: cmp r0, #185 movwgt r2, #4226 - bgt .L265 + bgt .L268 cmp r0, #160 movwgt r2, #4194 - bgt .L265 + bgt .L268 cmp r4, #35 movwls r2, #4193 - bls .L265 + bls .L268 cmp r4, #99 movwls r2, #4225 - bls .L265 -.L266: + bls .L268 +.L269: movw r2, #8322 -.L265: +.L268: str r2, [r3, #4] ldmfd sp!, {r4, pc} -.L268: +.L271: .align 2 -.L267: +.L270: .word 1000000 .word .LANCHOR0 .fnend @@ -2004,7 +2040,7 @@ NandcInit: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r2, #0 - ldr r4, .L271 + ldr r4, .L274 mov r3, #1 mov r5, #0 str r0, [r4, #3012] @@ -2042,7 +2078,7 @@ NandcInit: movw r2, #8322 mov r0, #36864 str r2, [r3, #344] - ldr r2, .L271+4 + ldr r2, .L274+4 str r2, [r3, #304] bl ftl_malloc str r5, [r4, #3820] @@ -2052,9 +2088,9 @@ NandcInit: add r0, r0, #32768 str r0, [r4, #3800] ldmfd sp!, {r3, r4, r5, pc} -.L272: +.L275: .align 2 -.L271: +.L274: .word .LANCHOR0 .word 1710593 .fnend @@ -2072,23 +2108,23 @@ FlashTimingCfg: sub r3, r3, #33 cmp r0, r2 cmpne r3, #1 - bls .L274 + bls .L277 movw r3, #4226 movw r2, #8322 cmp r0, r3 cmpne r0, r2 - bne .L275 -.L274: - ldr r3, .L276 + bne .L278 +.L277: + ldr r3, .L279 ldr r3, [r3, #3012] str r0, [r3, #4] -.L275: - ldr r3, .L276+4 +.L278: + ldr r3, .L279+4 ldrb r0, [r3, #2913] @ zero_extendqisi2 b NandcTimeCfg -.L277: +.L280: .align 2 -.L276: +.L279: .word .LANCHOR0 .word .LANCHOR1 .fnend @@ -2100,7 +2136,7 @@ NandcGetTimeCfg: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr ip, .L279 + ldr ip, .L282 stmfd sp!, {r4, lr} .save {r4, lr} ldr r4, [ip, #3012] @@ -2119,9 +2155,9 @@ NandcGetTimeCfg: orr r2, r2, r1, asl #16 str r2, [r3, #0] ldmfd sp!, {r4, pc} -.L280: +.L283: .align 2 -.L279: +.L282: .word .LANCHOR0 .fnend .size NandcGetTimeCfg, .-NandcGetTimeCfg @@ -2133,7 +2169,7 @@ NandcBchSel: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L286 + ldr r3, .L289 mov r1, #1 ldr r2, [r3, #3012] str r0, [r3, #3832] @@ -2143,24 +2179,24 @@ NandcBchSel: cmp r0, r1 bfi r3, r1, #8, #8 bfc r3, #18, #1 - beq .L285 -.L282: + beq .L288 +.L285: cmp r0, #24 orreq r3, r3, #16 - beq .L283 + beq .L286 cmp r0, #40 orr r3, r3, #262144 orr r3, r3, #16 - bne .L283 -.L285: + bne .L286 +.L288: bfc r3, #4, #1 -.L283: +.L286: orr r3, r3, #1 str r3, [r2, #12] bx lr -.L287: +.L290: .align 2 -.L286: +.L289: .word .LANCHOR0 .fnend .size NandcBchSel, .-NandcBchSel @@ -2172,12 +2208,12 @@ FlashBchSel: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L289 + ldr r3, .L292 strb r0, [r3, #3836] b NandcBchSel -.L290: +.L293: .align 2 -.L289: +.L292: .word .LANCHOR0 .fnend .size FlashBchSel, .-FlashBchSel @@ -2188,14 +2224,14 @@ ftl_flash_resume: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L296 + ldr r3, .L299 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} mov r4, #0 ldr r2, [r3, #3012] ldr r1, [r3, #3016] ldr r5, [r3, #3032] - ldr r6, .L296+4 + ldr r6, .L299+4 str r1, [r2, #0] ldr r1, [r3, #3020] ldr r2, [r3, #3012] @@ -2211,22 +2247,22 @@ ftl_flash_resume: ldr r3, [r3, #3044] str r1, [r2, #336] str r3, [r2, #344] -.L293: +.L296: ldrb r3, [r6, r4, asl #3] @ zero_extendqisi2 sub r3, r3, #1 uxtb r3, r3 cmp r3, #253 - bhi .L292 + bhi .L295 uxtb r0, r4 bl FlashReset -.L292: +.L295: add r4, r4, #1 cmp r4, #4 - bne .L293 - ldr r4, .L296 + bne .L296 + ldr r4, .L299 ldrb r3, [r4, #3780] @ zero_extendqisi2 cmp r3, #0 - beq .L294 + beq .L297 mov r0, #1 bl NandcSetMode ldrb r0, [r4, #3772] @ zero_extendqisi2 @@ -2235,15 +2271,15 @@ ftl_flash_resume: bl NandcSetMode ubfx r0, r5, #8, #8 bl NandcSetDdrPara -.L294: - ldr r3, .L296 +.L297: + ldr r3, .L299 ldr r3, [r3, #3624] ldrb r0, [r3, #20] @ zero_extendqisi2 ldmfd sp!, {r4, r5, r6, lr} b FlashBchSel -.L297: +.L300: .align 2 -.L296: +.L299: .word .LANCHOR0 .word .LANCHOR0+2980 .fnend @@ -2299,11 +2335,11 @@ NandcIqrWaitFlashReady: and r3, r3, #2 uxtb r3, r3 cmp r3, #0 - bne .L301 + bne .L304 mov r0, r4 ldmfd sp!, {r4, lr} b wait_for_nand_flash_ready -.L301: +.L304: ldr r3, [r4, #368] orr r3, r3, #2 str r3, [r4, #368] @@ -2324,18 +2360,18 @@ FlashEraseBlocks: .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} .pad #28 sub sp, sp, #28 - ldr r5, .L322 + ldr r5, .L325 mov r6, r0 str r1, [sp, #12] mov r7, r2 ldrb r4, [r5, #852] @ zero_extendqisi2 cmp r4, #0 moveq r9, r5 - beq .L303 + beq .L306 mov r1, r2 bl FlashEraseSLc2KBlocks - b .L304 -.L312: + b .L307 +.L315: mov r8, #36 rsb r3, r4, r7 mul r8, r8, r4 @@ -2353,17 +2389,17 @@ FlashEraseBlocks: cmp r0, r3 mvncs r3, #0 strcs r3, [r6, r8] - bcs .L306 + bcs .L309 ldrb r3, [r5, #3837] @ zero_extendqisi2 cmp r3, #0 add r3, r9, r0, asl #4 ldr r3, [r3, #3636] moveq sl, #0 cmp r3, #0 - beq .L308 + beq .L311 uxtb r0, r0 bl FlashWaitCmdDone -.L308: +.L311: ldr r2, [sp, #20] mov r1, #0 cmp sl, #0 @@ -2385,15 +2421,15 @@ FlashEraseBlocks: ldr r3, [sp, #12] mov r0, r8 cmp r3, #1 - bne .L310 + bne .L313 ldrb r3, [r5, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L310 + beq .L313 bl flash_enter_slc_mode - b .L311 -.L310: + b .L314 +.L313: bl flash_exit_slc_mode -.L311: +.L314: ldr r3, [sp, #20] mov r0, r8 ldr r1, [sp, #16] @@ -2409,59 +2445,59 @@ FlashEraseBlocks: bl FlashEraseCmd mov r0, r8 bl NandcFlashDeCs -.L306: +.L309: add r4, r4, #1 -.L303: +.L306: cmp r4, r7 - bcc .L312 - ldr r5, .L322 + bcc .L315 + ldr r5, .L325 mov r4, #0 - ldr r8, .L322+4 + ldr r8, .L325+4 ldr r0, [r5, #3012] bl NandcIqrWaitFlashReady - b .L313 -.L315: + b .L316 +.L318: uxtb r0, r4 bl FlashWaitCmdDone ldr r3, [sp, #12] cmp r3, #1 - bne .L314 + bne .L317 ldrb r3, [r5, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L314 + beq .L317 ldrb r0, [r8, r4, asl #4] @ zero_extendqisi2 bl flash_exit_slc_mode -.L314: +.L317: add r4, r4, #1 -.L313: +.L316: ldrb r2, [r5, #3762] @ zero_extendqisi2 - ldr r3, .L322 + ldr r3, .L325 cmp r4, r2 - bcc .L315 + bcc .L318 ldr r0, [r3, #3840] cmp r0, #0 - beq .L304 + beq .L307 ldrb r3, [r3, #2980] @ zero_extendqisi2 cmp r3, #69 moveq r3, #0 moveq r2, r3 - bne .L321 - b .L316 -.L317: + bne .L324 + b .L319 +.L320: add r3, r3, #1 str r2, [r6, #-36] -.L316: +.L319: cmp r3, r7 add r6, r6, #36 - bne .L317 -.L321: + bne .L320 +.L324: mov r0, #0 -.L304: +.L307: add sp, sp, #28 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L323: +.L326: .align 2 -.L322: +.L325: .word .LANCHOR0 .word .LANCHOR0+3628 .fnend @@ -2494,7 +2530,7 @@ NandcSendDumpDataStart: ldr r2, [r0, #16] .pad #8 sub sp, sp, #8 - ldr r3, .L326 + ldr r3, .L329 str r2, [sp, #4] ldr r2, [sp, #4] bfc r2, #2, #1 @@ -2506,9 +2542,9 @@ NandcSendDumpDataStart: str r3, [r0, #8] add sp, sp, #8 bx lr -.L327: +.L330: .align 2 -.L326: +.L329: .word 538969130 .fnend .size NandcSendDumpDataStart, .-NandcSendDumpDataStart @@ -2522,12 +2558,12 @@ NandcSendDumpDataDone: @ link register save eliminated. .pad #8 sub sp, sp, #8 -.L329: +.L332: ldr r3, [r0, #8] str r3, [sp, #4] ldr r3, [sp, #4] tst r3, #1048576 - beq .L329 + beq .L332 add sp, sp, #8 bx lr .fnend @@ -2542,7 +2578,7 @@ NandcXferStart: stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r6, r1 - ldr r1, .L344 + ldr r1, .L347 mov r8, r2 mov r4, #0 .pad #20 @@ -2567,7 +2603,7 @@ NandcXferStart: bfi r4, r3, #4, #1 ldr r3, [r1, #3788] cmp r3, #3 - bls .L332 + bls .L335 ldr r3, [r5, #16] cmp r9, #0 cmpeq ip, #0 @@ -2575,9 +2611,9 @@ NandcXferStart: ldr r3, [sp, #12] bfc r3, #2, #1 str r3, [sp, #12] - beq .L333 + beq .L336 cmp r6, #0 - beq .L334 + beq .L337 ldr r3, [r1, #3832] mov r0, ip cmp r3, #24 @@ -2588,8 +2624,8 @@ NandcXferStart: str r3, [sp, #4] mov r3, #0 mov r2, r3 - b .L336 -.L339: + b .L339 +.L342: cmp ip, #0 mov lr, r3, lsr #2 add r2, r2, #1 @@ -2603,11 +2639,11 @@ NandcXferStart: strne sl, [fp, lr, asl #2] ldr lr, [sp, #0] add r3, r3, lr -.L336: +.L339: ldr sl, [sp, #4] cmp r2, sl - bcc .L339 -.L334: + bcc .L342 +.L337: mov r0, r5 add r8, r8, #1 bl rk_nandc_xfer_irq_flag_init @@ -2615,7 +2651,7 @@ NandcXferStart: mov r8, r8, asr #1 cmp r9, #0 bfi r4, r8, #22, #6 - ldr r8, .L344 + ldr r8, .L347 orr r3, r3, #1 str r3, [r5, #368] ldr r3, [r5, #364] @@ -2667,19 +2703,19 @@ NandcXferStart: ldr r3, [sp, #12] orr r3, r3, #1 str r3, [sp, #12] -.L333: +.L336: ldr r3, [sp, #12] str r3, [r5, #16] -.L332: +.L335: str r7, [r5, #12] str r4, [r5, #8] orr r4, r4, #4 str r4, [r5, #8] add sp, sp, #20 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L345: +.L348: .align 2 -.L344: +.L347: .word .LANCHOR0 .fnend .size NandcXferStart, .-NandcXferStart @@ -2698,14 +2734,14 @@ NandcCopy1KB: mov r4, r0 ldr r6, [sp, #16] add r2, r2, r5, asl #9 - bne .L347 + bne .L350 cmp r3, #0 - beq .L348 + beq .L351 mov r0, r2 mov r1, r3 mov r2, #1024 bl memcpy -.L348: +.L351: cmp r6, #0 ldmeqfd sp!, {r4, r5, r6, pc} ldrb r3, [r6, #2] @ zero_extendqisi2 @@ -2723,14 +2759,14 @@ NandcCopy1KB: add r5, r5, #128 str r3, [r4, r5, asl #2] ldmfd sp!, {r4, r5, r6, pc} -.L347: +.L350: cmp r3, #0 - beq .L350 + beq .L353 mov r1, r2 mov r0, r3 mov r2, #1024 bl memcpy -.L350: +.L353: cmp r6, #0 ldmeqfd sp!, {r4, r5, r6, pc} mov r5, r5, lsr #1 @@ -2759,14 +2795,14 @@ Ftl_log2: @ link register save eliminated. mov r2, #1 mov r3, #0 - b .L352 -.L353: + b .L355 +.L356: add r3, r3, #1 mov r2, r2, asl #1 uxth r3, r3 -.L352: +.L355: cmp r2, r0 - bls .L353 + bls .L356 sub r3, r3, #1 uxth r0, r3 bx lr @@ -2791,7 +2827,7 @@ FtlSysBlkNumInit: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L358 + ldr r3, .L361 movw r2, #3848 cmp r0, #23 movw r1, #3858 @@ -2809,9 +2845,9 @@ FtlSysBlkNumInit: rsb r2, r2, r1 str r2, [r3, #3860] bx lr -.L359: +.L362: .align 2 -.L358: +.L361: .word .LANCHOR0 .fnend .size FtlSysBlkNumInit, .-FtlSysBlkNumInit @@ -2825,7 +2861,7 @@ FtlConstantsInit: stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} movw r2, #3868 - ldr r3, .L377 + ldr r3, .L380 mov r4, r0 ldrh lr, [r0, #8] .pad #20 @@ -2841,17 +2877,17 @@ FtlConstantsInit: movw r2, #3858 strh r6, [r3, r2] @ movhi mov r3, #0 - ldr r2, .L377+4 -.L361: + ldr r2, .L380+4 +.L364: strb r3, [r3, r2] add r3, r3, #1 cmp r3, #32 - bne .L361 + bne .L364 ldrh r2, [r4, #14] ldrh r3, [r4, #20] cmp r3, r2, lsr #8 - bcs .L362 - ldr r2, .L377+4 + bcs .L365 + ldr r2, .L380+4 sub ip, r1, #1 uxtb r7, r0 mov r3, #0 @@ -2861,22 +2897,22 @@ FtlConstantsInit: mov r8, r7, asl #1 uxtb r8, r8 str ip, [sp, #12] - b .L363 -.L364: + b .L366 +.L367: strb ip, [r9, r2] add fp, ip, r7 add ip, ip, r8 add r5, r5, #1 strb fp, [sl, r2] uxtb ip, ip -.L366: +.L369: cmp r5, r1 add r2, r2, r0 - bcc .L364 + bcc .L367 add r3, r3, #1 -.L363: +.L366: cmp r3, r0 - bcs .L365 + bcs .L368 ldr fp, [sp, #8] mov r2, #0 uxtb ip, r3 @@ -2884,22 +2920,22 @@ FtlConstantsInit: add r9, fp, r3 ldr fp, [sp, #12] add sl, fp, r3 - b .L366 -.L365: - ldr r3, .L377 + b .L369 +.L368: + ldr r3, .L380 movw r2, #3870 mov r1, r1, asl #1 mov r6, r6, lsr #1 strh r1, [r3, r2] @ movhi movw r2, #3858 strh r6, [r3, r2] @ movhi -.L362: - ldr r3, .L377 +.L365: + ldr r3, .L380 movw r2, #3906 cmp lr, #1 mov r1, #5 mov ip, #0 - ldr sl, .L377 + ldr sl, .L380 ldrb r8, [r3, #852] @ zero_extendqisi2 strh r1, [r3, r2] @ movhi movw r1, #3908 @@ -2909,7 +2945,7 @@ FtlConstantsInit: strh ip, [r3, r1] @ movhi mov r1, #4352 strh r1, [r3, r2] @ movhi - ldrne r3, .L377 + ldrne r3, .L380 movne r1, #384 strneh r1, [r3, r2] @ movhi movw r3, #3870 @@ -2980,8 +3016,8 @@ FtlConstantsInit: uxth r0, r0 strh r0, [r4, r3] @ movhi cmp r0, #4 - ldr r4, .L377 - ldrls r2, .L377 + ldr r4, .L380 + ldrls r2, .L380 movls r1, #4 strlsh r1, [r2, r3] @ movhi cmp r8, #0 @@ -3005,10 +3041,10 @@ FtlConstantsInit: ldrh r0, [r4, r3] bl __aeabi_uidiv cmp r5, #1 - ldreq r3, .L377 + ldreq r3, .L380 uxtah r6, r6, r0 str r6, [r4, #3844] - ldr r4, .L377 + ldr r4, .L380 addeq r6, r6, #4 streq r6, [r3, #3844] ldr r0, [r4, #3844] @@ -3051,12 +3087,12 @@ FtlConstantsInit: addne r1, r1, #5 strneh r0, [r4, r3] @ movhi strne r1, [r4, #3944] - bne .L374 -.L373: + bne .L377 +.L376: cmp r2, #7 movls r3, #8 strls r3, [r4, #3944] -.L374: +.L377: movw r3, #3960 mov r2, #0 strh r2, [r4, r3] @ movhi @@ -3068,14 +3104,14 @@ FtlConstantsInit: add r2, r2, #52 add r6, r2, r6, asl #2 cmp r6, r5, asl #9 - ldrcc r2, .L377 + ldrcc r2, .L380 movcc r1, #1 strcch r1, [r2, r3] @ movhi add sp, sp, #20 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L378: +.L381: .align 2 -.L377: +.L380: .word .LANCHOR0 .word .LANCHOR0+3874 .fnend @@ -3088,36 +3124,36 @@ IsBlkInVendorPart: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L386 + ldr r3, .L389 movw r2, #3962 ldrh r2, [r3, r2] cmp r2, #0 - beq .L384 + beq .L387 mov r2, #3936 ldrh r1, [r3, r2] ldr r2, [r3, #3964] mov r3, #0 - b .L381 -.L383: + b .L384 +.L386: ldrh ip, [r2], #2 cmp ip, r0 - beq .L385 + beq .L388 add r3, r3, #1 uxth r3, r3 -.L381: +.L384: cmp r3, r1 - bne .L383 + bne .L386 mov r0, #0 bx lr -.L385: +.L388: mov r0, #1 bx lr -.L384: +.L387: mov r0, r2 bx lr -.L387: +.L390: .align 2 -.L386: +.L389: .word .LANCHOR0 .fnend .size IsBlkInVendorPart, .-IsBlkInVendorPart @@ -3128,36 +3164,36 @@ FtlCacheMetchLpa: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r2, .L396 + ldr r2, .L399 stmfd sp!, {r4, lr} .save {r4, lr} ldr r3, [r2, #3968] cmp r3, #0 - beq .L393 + beq .L396 ldr ip, [r2, #3972] mov r2, #0 -.L392: +.L395: ldr r4, [ip, #16] cmp r4, r0 - bcc .L390 + bcc .L393 cmp r4, r1 - bls .L394 -.L390: + bls .L397 +.L393: add r2, r2, #1 add ip, ip, #36 cmp r2, r3 - bne .L392 + bne .L395 mov r0, #0 ldmfd sp!, {r4, pc} -.L394: +.L397: mov r0, #1 ldmfd sp!, {r4, pc} -.L393: +.L396: mov r0, r3 ldmfd sp!, {r4, pc} -.L397: +.L400: .align 2 -.L396: +.L399: .word .LANCHOR0 .fnend .size FtlCacheMetchLpa, .-FtlCacheMetchLpa @@ -3169,12 +3205,12 @@ FtlGetCap: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L399 + ldr r3, .L402 ldr r0, [r3, #3956] bx lr -.L400: +.L403: .align 2 -.L399: +.L402: .word .LANCHOR0 .fnend .size FtlGetCap, .-FtlGetCap @@ -3186,12 +3222,12 @@ ftl_get_density: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L402 + ldr r3, .L405 ldr r0, [r3, #3956] bx lr -.L403: +.L406: .align 2 -.L402: +.L405: .word .LANCHOR0 .fnend .size ftl_get_density, .-ftl_get_density @@ -3203,12 +3239,12 @@ FtlGetLpn: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L405 + ldr r3, .L408 ldr r0, [r3, #3976] bx lr -.L406: +.L409: .align 2 -.L405: +.L408: .word .LANCHOR0 .fnend .size FtlGetLpn, .-FtlGetLpn @@ -3222,7 +3258,7 @@ FtlBbmMapBadBlock: stmfd sp!, {r0, r1, r4, r5, r6, lr} .save {r0, r1, r4, r5, r6, lr} movw r3, #3912 - ldr r4, .L408 + ldr r4, .L411 mov r5, r0 ldrh r6, [r4, r3] mov r1, r6 @@ -3240,7 +3276,7 @@ FtlBbmMapBadBlock: str r1, [r0, ip, asl #2] str r1, [sp, #0] mov r1, r5 - ldr r0, .L408+4 + ldr r0, .L411+4 bl printk movw r3, #3986 ldrh r2, [r4, r3] @@ -3248,9 +3284,9 @@ FtlBbmMapBadBlock: add r2, r2, r6 strh r2, [r4, r3] @ movhi ldmfd sp!, {r2, r3, r4, r5, r6, pc} -.L409: +.L412: .align 2 -.L408: +.L411: .word .LANCHOR0 .word .LC3 .fnend @@ -3266,7 +3302,7 @@ FtlBbmIsBadBlock: stmfd sp!, {r3, r4, r5, r6, r7, lr} .save {r3, r4, r5, r6, r7, lr} movw r3, #3912 - ldr r5, .L411 + ldr r5, .L414 mov r7, r0 ldrh r6, [r5, r3] mov r1, r6 @@ -3284,9 +3320,9 @@ FtlBbmIsBadBlock: mov r0, r0, lsr r4 and r0, r0, #1 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L412: +.L415: .align 2 -.L411: +.L414: .word .LANCHOR0 .fnend .size FtlBbmIsBadBlock, .-FtlBbmIsBadBlock @@ -3312,11 +3348,11 @@ FtlBbtCalcTotleCnt: .save {r4, r5, r6, r7, r8, lr} mov r4, #0 mov r5, r4 - ldr r6, .L418 + ldr r6, .L421 movw r8, #3912 movw r7, #3870 - b .L415 -.L417: + b .L418 +.L420: mov r0, r5 add r5, r5, #1 bl FtlBbmIsBadBlock @@ -3324,17 +3360,17 @@ FtlBbtCalcTotleCnt: cmp r0, #0 addne r4, r4, #1 uxthne r4, r4 -.L415: +.L418: ldrh r3, [r6, r8] ldrh r2, [r6, r7] mul r3, r2, r3 cmp r5, r3 - blt .L417 + blt .L420 mov r0, r4 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L419: +.L422: .align 2 -.L418: +.L421: .word .LANCHOR0 .fnend .size FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt @@ -3348,7 +3384,7 @@ V2P_block: stmfd sp!, {r3, r4, r5, r6, r7, lr} .save {r3, r4, r5, r6, r7, lr} mov r3, #3872 - ldr r5, .L421 + ldr r5, .L424 mov r7, r1 mov r6, r0 ldrh r4, [r5, r3] @@ -3364,9 +3400,9 @@ V2P_block: add r1, r5, r1 uxth r0, r1 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L422: +.L425: .align 2 -.L421: +.L424: .word .LANCHOR0 .fnend .size V2P_block, .-V2P_block @@ -3377,7 +3413,7 @@ P2V_plane: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L424 + ldr r3, .L427 mov r2, #3872 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} @@ -3393,9 +3429,9 @@ P2V_plane: add r1, r5, r1 uxth r0, r1 ldmfd sp!, {r4, r5, r6, pc} -.L425: +.L428: .align 2 -.L424: +.L427: .word .LANCHOR0 .fnend .size P2V_plane, .-P2V_plane @@ -3409,7 +3445,7 @@ P2V_block_in_plane: stmfd sp!, {r4, lr} .save {r4, lr} movw r3, #3912 - ldr r4, .L427 + ldr r4, .L430 ldrh r1, [r4, r3] bl __aeabi_uidivmod mov r3, #3872 @@ -3418,13 +3454,66 @@ P2V_block_in_plane: bl __aeabi_uidiv uxth r0, r0 ldmfd sp!, {r4, pc} -.L428: +.L431: .align 2 -.L427: +.L430: .word .LANCHOR0 .fnend .size P2V_block_in_plane, .-P2V_block_in_plane .align 2 + .type FtlFreeSysBlkQueueIn.part.5, %function +FtlFreeSysBlkQueueIn.part.5: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + cmp r1, #0 + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} + mov r5, r0 + beq .L433 + ldr r4, .L434 + ldr r3, [r4, #4040] + cmp r3, #0 + bne .L433 + bl P2V_block_in_plane + mov r1, #1 + mov r3, r5, asl #10 + mov r2, r1 + mov r6, r0 + ldr r0, [r4, #4044] + mov r6, r6, asl #1 + str r3, [r0, #4] + bl FlashEraseBlocks + ldr r3, [r4, #4048] + ldrh r2, [r3, r6] + add r2, r2, #1 + strh r2, [r3, r6] @ movhi + ldr r3, [r4, #4052] + add r3, r3, #1 + str r3, [r4, #4052] +.L433: + ldr r3, .L434 + movw r2, #4062 + movw r0, #4056 + ldrh r1, [r3, r2] + add r1, r1, #1 + strh r1, [r3, r2] @ movhi + movw r2, #4060 + ldrh r1, [r3, r2] + add ip, r1, #4 + add r1, r1, #1 + bic r1, r1, #64512 + add ip, r3, ip, asl #1 + strh r5, [ip, r0] @ movhi + strh r1, [r3, r2] @ movhi + ldmfd sp!, {r4, r5, r6, pc} +.L435: + .align 2 +.L434: + .word .LANCHOR0 + .fnend + .size FtlFreeSysBlkQueueIn.part.5, .-FtlFreeSysBlkQueueIn.part.5 + .align 2 .global ftl_cmp_data_ver .type ftl_cmp_data_ver, %function ftl_cmp_data_ver: @@ -3433,13 +3522,13 @@ ftl_cmp_data_ver: @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. cmp r0, r1 - bls .L430 + bls .L437 rsb r0, r1, r0 cmp r0, #-2147483648 movhi r0, #0 movls r0, #1 bx lr -.L430: +.L437: rsb r0, r0, r1 cmp r0, #-2147483648 movls r0, #0 @@ -3455,15 +3544,15 @@ FtlFreeSysBlkQueueEmpty: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r2, .L433 - movw r3, #4046 + ldr r2, .L440 + movw r3, #4062 ldrh r0, [r2, r3] rsbs r0, r0, #1 movcc r0, #0 bx lr -.L434: +.L441: .align 2 -.L433: +.L440: .word .LANCHOR0 .fnend .size FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty @@ -3475,16 +3564,16 @@ FtlFreeSysBlkQueueFull: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r2, .L436 - movw r3, #4046 + ldr r2, .L443 + movw r3, #4062 ldrh r0, [r2, r3] sub r2, r0, #1024 rsbs r0, r2, #0 adc r0, r0, r2 bx lr -.L437: +.L444: .align 2 -.L436: +.L443: .word .LANCHOR0 .fnend .size FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull @@ -3495,57 +3584,22 @@ FtlFreeSysBlkQueueIn: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r2, .L441 - movw r3, #4046 - stmfd sp!, {r4, r5, r6, lr} - .save {r4, r5, r6, lr} - mov r5, r0 + @ link register save eliminated. + sub r2, r0, #1 + movw r3, #65533 + uxth r2, r2 + cmp r2, r3 + bxhi lr + ldr r2, .L447 + movw r3, #4062 ldrh r3, [r2, r3] cmp r3, #1024 - ldmeqfd sp!, {r4, r5, r6, pc} - cmp r1, #0 - beq .L440 - ldr r4, .L441+4 - ldr r3, [r4, #-2088] - cmp r3, #0 - bne .L440 - bl P2V_block_in_plane - mov r1, #1 - mov r3, r5, asl #10 - mov r2, r1 - mov r6, r0 - ldr r0, [r4, #-2084] - mov r6, r6, asl #1 - str r3, [r0, #4] - bl FlashEraseBlocks - ldr r3, [r4, #-2080] - ldrh r2, [r3, r6] - add r2, r2, #1 - strh r2, [r3, r6] @ movhi - ldr r3, [r4, #-2076] - add r3, r3, #1 - str r3, [r4, #-2076] -.L440: - ldr r3, .L441 - movw r2, #4046 - movw r0, #4040 - ldrh r1, [r3, r2] - add r1, r1, #1 - strh r1, [r3, r2] @ movhi - movw r2, #4044 - ldrh r1, [r3, r2] - add ip, r1, #4 - add r1, r1, #1 - bic r1, r1, #64512 - add ip, r3, ip, asl #1 - strh r5, [ip, r0] @ movhi - strh r1, [r3, r2] @ movhi - ldmfd sp!, {r4, r5, r6, pc} -.L442: + bxeq lr + b FtlFreeSysBlkQueueIn.part.5 +.L448: .align 2 -.L441: +.L447: .word .LANCHOR0 - .word .LANCHOR2 .fnend .size FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn .align 2 @@ -3555,46 +3609,50 @@ FtlFreeSysBLkSort: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L446 - mov r0, #0 - ldr r2, .L446+4 - ldr r1, .L446+8 + ldr r3, .L453 + ldr r2, .L453+4 + ldr r1, .L453+8 stmfd sp!, {r4, r5, lr} .save {r4, r5, lr} ldrh r4, [r2, r3] - movw r3, #4042 + movw r3, #4062 + ldrh r3, [r1, r3] + and r4, r4, #31 + cmp r3, #0 + ldmeqfd sp!, {r4, r5, pc} + movw r3, #4058 + mov r0, #0 ldrh r2, [r1, r3] add r3, r3, #2 - and r4, r4, #31 ldrh r3, [r1, r3] - b .L444 -.L445: + b .L451 +.L452: add ip, r1, r2, asl #1 add r2, r2, #1 - add ip, ip, #4048 + add ip, ip, #4064 add r0, r0, #1 mov r2, r2, asl #22 ldrh r5, [ip, #0] add ip, r1, r3, asl #1 add r3, r3, #1 - add ip, ip, #4048 + add ip, ip, #4064 mov r2, r2, lsr #22 uxth r0, r0 mov r3, r3, asl #22 strh r5, [ip, #0] @ movhi mov r3, r3, lsr #22 -.L444: +.L451: cmp r0, r4 - ldr ip, .L446+8 - blt .L445 - movw r1, #4042 + ldr ip, .L453+8 + blt .L452 + movw r1, #4058 strh r2, [ip, r1] @ movhi - movw r2, #4044 + movw r2, #4060 strh r3, [ip, r2] @ movhi ldmfd sp!, {r4, r5, pc} -.L447: +.L454: .align 2 -.L446: +.L453: .word -2044 .word .LANCHOR2 .word .LANCHOR0 @@ -3607,31 +3665,31 @@ remove_from_free_sys_Queue: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L454 - movw r2, #4046 + ldr r3, .L461 + movw r2, #4062 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} mov r1, r0 ldrh r0, [r3, r2] cmp r0, #0 ldmeqfd sp!, {r4, r5, r6, pc} - movw r2, #4042 + movw r2, #4058 mov r5, #0 ldrh r2, [r3, r2] - b .L450 -.L452: + b .L457 +.L459: add ip, r5, r2 - ldr r4, .L454 - movw r6, #4040 + ldr r4, .L461 + movw r6, #4056 mov ip, ip, asl #22 add ip, r3, ip, lsr #21 - add ip, ip, #4048 + add ip, ip, #4064 ldrh ip, [ip, #0] cmp ip, r1 - bne .L451 - ldr r0, .L454+4 + bne .L458 + ldr r0, .L461+4 bl printk - movw r2, #4042 + movw r2, #4058 ldrh r3, [r4, r2] mov r0, #1 add r1, r3, #4 @@ -3645,21 +3703,21 @@ remove_from_free_sys_Queue: add r5, r5, #8 strh r1, [r5, r6] @ movhi strh r3, [r4, r2] @ movhi - movw r3, #4046 + movw r3, #4062 ldrh r2, [r4, r3] sub r2, r2, #1 strh r2, [r4, r3] @ movhi ldmfd sp!, {r4, r5, r6, pc} -.L451: +.L458: add r5, r5, #1 -.L450: +.L457: cmp r5, r0 - bcc .L452 + bcc .L459 mov r0, #0 ldmfd sp!, {r4, r5, r6, pc} -.L455: +.L462: .align 2 -.L454: +.L461: .word .LANCHOR0 .word .LC4 .fnend @@ -3671,76 +3729,76 @@ FtlFreeSysBlkQueueOut: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - .save {r4, r5, r6, r7, r8, r9, sl, lr} - movw r7, #4046 - ldr r4, .L463 - movw r8, #4042 -.L457: - ldrh r1, [r4, r7] + stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} + .save {r3, r4, r5, r6, r7, r8, sl, lr} + movw r6, #4062 + ldr r4, .L470 + movw r7, #4058 +.L464: + ldrh r1, [r4, r6] cmp r1, #0 - beq .L458 - ldr r9, .L463+4 + beq .L465 + ldrh r3, [r4, r7] sub r1, r1, #1 - ldrh r3, [r4, r8] - ldr r6, [r9, #-2088] + ldr sl, [r4, #4040] add r2, r4, r3, asl #1 + cmp sl, #0 + add r2, r2, #4064 add r3, r3, #1 - add r2, r2, #4048 - cmp r6, #0 bic r3, r3, #64512 ldrh r5, [r2, #0] - strh r1, [r4, r7] @ movhi - strh r3, [r4, r8] @ movhi - bne .L459 + strh r1, [r4, r6] @ movhi + strh r3, [r4, r7] @ movhi + bne .L466 mov r0, r5 bl P2V_block_in_plane mov r3, r5, asl #10 - mov sl, r0 - ldr r0, [r9, #-2084] + mov r8, r0 + ldr r0, [r4, #4044] str r3, [r0, #4] ldrb r3, [r4, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L460 - mov r1, r6 + beq .L467 + mov r1, sl mov r2, #1 bl FlashEraseBlocks -.L460: - ldr r6, .L463+4 +.L467: mov r1, #1 + ldr r0, [r4, #4044] mov r2, r1 - mov sl, sl, asl #1 - ldr r0, [r6, #-2084] + mov r8, r8, asl #1 bl FlashEraseBlocks - ldr r3, [r6, #-2080] - ldrh r2, [r3, sl] + ldr r3, [r4, #4048] + ldrh r2, [r3, r8] add r2, r2, #1 - strh r2, [r3, sl] @ movhi - ldr r3, [r6, #-2076] + strh r2, [r3, r8] @ movhi + ldr r3, [r4, #4052] add r3, r3, #1 - str r3, [r6, #-2076] - b .L459 -.L458: - ldr r0, .L463+8 + str r3, [r4, #4052] + b .L466 +.L465: + ldr r0, .L470+4 bl printk -.L461: - b .L461 -.L459: - cmp r5, #0 - bne .L462 +.L468: + b .L468 +.L466: + sub r2, r5, #1 + movw r3, #65533 + uxth r2, r2 + cmp r2, r3 + bls .L469 mov r1, r5 - ldrh r2, [r4, r7] - ldr r0, .L463+12 + ldrh r2, [r4, r6] + ldr r0, .L470+8 bl printk - b .L457 -.L462: + b .L464 +.L469: mov r0, r5 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L464: + ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} +.L471: .align 2 -.L463: +.L470: .word .LANCHOR0 - .word .LANCHOR2 .word .LC5 .word .LC6 .fnend @@ -3752,7 +3810,7 @@ insert_data_list: .fnstart @ args = 0, pretend = 0, frame = 16 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r2, .L480 + ldr r2, .L487 mov r3, #3856 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} @@ -3760,49 +3818,49 @@ insert_data_list: sub sp, sp, #20 ldrh r3, [r2, r3] cmp r3, r0 - bls .L466 - ldr r1, .L480+4 + bls .L473 + ldr r1, .L487+4 mov ip, #6 mul ip, ip, r0 mvn r6, #0 ldr r4, [r1, #-2024] - mov r5, r1 + mov r8, r1 add r2, r4, ip strh r6, [r2, #2] @ movhi strh r6, [r4, ip] @ movhi ldr r3, [r1, #-2020] cmp r3, #0 - beq .L479 -.L467: + beq .L486 +.L474: ldr r7, [r1, #-2016] - mov r8, r0, asl #1 + mov r5, r0, asl #1 ldrh r1, [r2, #4] - ldr r9, .L480 - ldrh sl, [r7, r8] + ldr fp, [r8, #-2024] + ldrh sl, [r7, r5] cmp r1, #0 - ldr fp, [r5, #-2080] + ldr r8, .L487+8 mulne r6, r1, sl - ldr r1, [r5, #-2024] - ldr sl, .L480+8 - mov r5, #0 - add r8, fp, r8 - str r8, [sp, #12] - str r1, [sp, #4] - rsb r1, r1, r3 - mov r1, r1, asr #1 - mul r1, sl, r1 + rsb r1, fp, r3 mov sl, #3856 - ldrh sl, [r9, sl] - str sl, [sp, #8] + mov r1, r1, asr #1 + mul r1, r8, r1 + ldr r8, .L487 + ldrh sl, [r8, sl] + ldr r8, [r8, #4048] uxth r1, r1 -.L474: + add r5, r8, r5 + str r5, [sp, #12] + mov r5, #0 + str sl, [sp, #8] + str r8, [sp, #4] +.L481: add r5, r5, #1 ldr r8, [sp, #8] uxth r5, r5 cmp r5, r8 - bhi .L466 + bhi .L473 cmp r0, r1 - beq .L466 + beq .L473 mov r9, r1, asl #1 ldrh r8, [r3, #4] ldrh sl, [r7, r9] @@ -3810,56 +3868,56 @@ insert_data_list: mvneq r8, #0 mulne r8, r8, sl cmp r8, r6 - bne .L470 - ldrh sl, [fp, r9] + bne .L477 + ldr r8, [sp, #4] + ldrh sl, [r8, r9] ldr r9, [sp, #12] ldrh r8, [r9, #0] cmp sl, r8 - bcc .L472 - b .L471 -.L470: - bhi .L471 -.L472: + bcc .L479 + b .L478 +.L477: + bhi .L478 +.L479: ldrh r8, [r3, #0] movw sl, #65535 cmp r8, sl streqh r1, [r2, #2] @ movhi streqh r0, [r3, #0] @ movhi - ldreq r3, .L480+4 + ldreq r3, .L487+4 streq r2, [r3, #-2012] - beq .L466 -.L473: - ldr r9, [sp, #4] + beq .L473 +.L480: mov r1, #6 - mla r3, r1, r8, r9 + mla r3, r1, r8, fp mov r1, r8 - b .L474 -.L471: + b .L481 +.L478: strh r1, [r4, ip] @ movhi ldrh r1, [r3, #2] strh r1, [r2, #2] @ movhi - ldr r1, .L480+4 + ldr r1, .L487+4 ldr ip, [r1, #-2020] cmp r3, ip - bne .L475 + bne .L482 strh r0, [r3, #2] @ movhi -.L479: +.L486: str r2, [r1, #-2020] - b .L466 -.L475: + b .L473 +.L482: ldrh r2, [r3, #2] mov ip, #6 ldr r1, [r1, #-2024] mul r2, ip, r2 strh r0, [r1, r2] @ movhi strh r0, [r3, #2] @ movhi -.L466: +.L473: mov r0, #0 add sp, sp, #20 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L481: +.L488: .align 2 -.L480: +.L487: .word .LANCHOR0 .word .LANCHOR2 .word -1431655765 @@ -3875,15 +3933,15 @@ INSERT_DATA_LIST: stmfd sp!, {r3, lr} .save {r3, lr} bl insert_data_list - ldr r2, .L483 - ldr r3, .L483+4 + ldr r2, .L490 + ldr r3, .L490+4 ldrh r1, [r2, r3] add r1, r1, #1 strh r1, [r2, r3] @ movhi ldmfd sp!, {r3, pc} -.L484: +.L491: .align 2 -.L483: +.L490: .word .LANCHOR2 .word -2008 .fnend @@ -3899,8 +3957,8 @@ insert_free_list: .save {r4, r5, r6, r7, r8, r9, sl, lr} movw r6, #65535 cmp r0, r6 - beq .L486 - ldr r1, .L493 + beq .L493 + ldr r1, .L500 mov r5, #6 mul ip, r5, r0 mvn r3, #0 @@ -3910,59 +3968,61 @@ insert_free_list: strh r3, [r4, ip] @ movhi ldr r3, [r1, #-2004] cmp r3, #0 - beq .L492 -.L487: + beq .L499 +.L494: ldr sl, [r1, #-2024] mov r8, r0, asl #1 - ldr r7, [r1, #-2080] + ldr r9, .L500+4 rsb r1, sl, r3 - ldr r9, .L493+4 + ldr r7, .L500+8 mov r1, r1, asr #1 - ldrh r8, [r7, r8] + ldr r7, [r7, #4048] mul r1, r9, r1 mov r9, r5 + ldrh r8, [r7, r8] uxth r1, r1 -.L490: +.L497: mov r5, r1, asl #1 ldrh r5, [r7, r5] cmp r5, r8 - bcs .L488 + bcs .L495 ldrh r5, [r3, #0] cmp r5, r6 streqh r1, [r2, #2] @ movhi streqh r0, [r3, #0] @ movhi - beq .L486 -.L489: + beq .L493 +.L496: mla r3, r9, r5, sl mov r1, r5 - b .L490 -.L488: + b .L497 +.L495: ldrh r5, [r3, #2] strh r5, [r2, #2] @ movhi strh r1, [r4, ip] @ movhi - ldr r1, .L493 + ldr r1, .L500 ldr ip, [r1, #-2004] cmp r3, ip - bne .L491 + bne .L498 strh r0, [r3, #2] @ movhi -.L492: +.L499: str r2, [r1, #-2004] - b .L486 -.L491: + b .L493 +.L498: ldrh r2, [r3, #2] mov ip, #6 ldr r1, [r1, #-2024] mul r2, ip, r2 strh r0, [r1, r2] @ movhi strh r0, [r3, #2] @ movhi -.L486: +.L493: mov r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L494: +.L501: .align 2 -.L493: +.L500: .word .LANCHOR2 .word -1431655765 + .word .LANCHOR0 .fnend .size insert_free_list, .-insert_free_list .align 2 @@ -3975,15 +4035,15 @@ INSERT_FREE_LIST: stmfd sp!, {r3, lr} .save {r3, lr} bl insert_free_list - ldr r2, .L496 - ldr r3, .L496+4 + ldr r2, .L503 + ldr r3, .L503+4 ldrh r1, [r2, r3] add r1, r1, #1 strh r1, [r2, r3] @ movhi ldmfd sp!, {r3, pc} -.L497: +.L504: .align 2 -.L496: +.L503: .word .LANCHOR2 .word -2000 .fnend @@ -3995,7 +4055,7 @@ List_remove_node: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr ip, .L503 + ldr ip, .L510 mov r2, #6 mul r1, r2, r1 ldr r3, [ip, #-2024] @@ -4006,7 +4066,7 @@ List_remove_node: movw r6, #65535 cmp r5, r4 ldrh r4, [r3, r1] - bne .L499 + bne .L506 cmp r4, r6 mlane r2, r2, r4, r3 moveq r2, #0 @@ -4014,17 +4074,17 @@ List_remove_node: strne r2, [r0, #0] mvnne r0, #0 strneh r0, [r2, #2] @ movhi - b .L501 -.L499: + b .L508 +.L506: cmp r4, r6 ldrh r0, [r5, #2] - bne .L502 + bne .L509 cmp r0, r4 mulne r2, r2, r0 mvnne r0, #0 strneh r0, [r3, r2] @ movhi - b .L501 -.L502: + b .L508 +.L509: mla r4, r2, r4, r3 strh r0, [r4, #2] @ movhi ldrh r6, [r5, #2] @@ -4032,15 +4092,15 @@ List_remove_node: ldr r0, [ip, #-2024] mul r2, r2, r6 strh r4, [r0, r2] @ movhi -.L501: +.L508: mvn r2, #0 mov r0, #0 strh r2, [r3, r1] @ movhi strh r2, [r5, #2] @ movhi ldmfd sp!, {r4, r5, r6, pc} -.L504: +.L511: .align 2 -.L503: +.L510: .word .LANCHOR2 .fnend .size List_remove_node, .-List_remove_node @@ -4055,25 +4115,25 @@ List_pop_index_node: .save {r4, lr} ldr r3, [r0, #0] cmp r3, #0 - beq .L510 - ldr r2, .L511 + beq .L517 + ldr r2, .L518 movw lr, #65535 mov ip, #6 ldr r4, [r2, #-2024] - b .L507 -.L509: + b .L514 +.L516: mla r3, ip, r2, r4 sub r1, r1, #1 uxth r1, r1 -.L507: +.L514: cmp r1, #0 - beq .L508 + beq .L515 ldrh r2, [r3, #0] cmp r2, lr - bne .L509 -.L508: + bne .L516 +.L515: rsb r4, r4, r3 - ldr r3, .L511+4 + ldr r3, .L518+4 mov r4, r4, asr #1 mul r4, r3, r4 uxth r4, r4 @@ -4081,12 +4141,12 @@ List_pop_index_node: bl List_remove_node mov r0, r4 ldmfd sp!, {r4, pc} -.L510: +.L517: movw r0, #65535 ldmfd sp!, {r4, pc} -.L512: +.L519: .align 2 -.L511: +.L518: .word .LANCHOR2 .word -1431655765 .fnend @@ -4099,39 +4159,39 @@ List_get_gc_head_node: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r2, .L519 + ldr r2, .L526 ldr r3, [r2, #-2020] cmp r3, #0 - beq .L518 + beq .L525 ldr r2, [r2, #-2024] movw r1, #65535 mov ip, #6 - b .L515 -.L517: + b .L522 +.L524: mla r3, ip, r3, r2 sub r0, r0, #1 uxth r0, r0 -.L515: +.L522: cmp r0, #0 - beq .L516 + beq .L523 ldrh r3, [r3, #0] cmp r3, r1 - bne .L517 + bne .L524 mov r0, r1 bx lr -.L516: +.L523: rsb r3, r2, r3 - ldr r0, .L519+4 + ldr r0, .L526+4 mov r3, r3, asr #1 mul r0, r0, r3 uxth r0, r0 bx lr -.L518: +.L525: movw r0, #65535 bx lr -.L520: +.L527: .align 2 -.L519: +.L526: .word .LANCHOR2 .word -1431655765 .fnend @@ -4146,26 +4206,26 @@ List_update_data_list: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r4, r0 - ldr r3, .L528 - ldr r2, .L528+4 + ldr r3, .L535 + ldr r2, .L535+4 ldrh r2, [r3, r2] cmp r2, r0 - beq .L522 - ldr r2, .L528+8 + beq .L529 + ldr r2, .L535+8 ldrh r2, [r3, r2] cmp r2, r0 - beq .L522 - ldr r2, .L528+12 + beq .L529 + ldr r2, .L535+12 ldrh r2, [r3, r2] cmp r2, r0 - beq .L522 + beq .L529 mov r5, #6 ldr r2, [r3, #-2024] mul r5, r5, r0 ldr r0, [r3, #-2020] add r1, r2, r5 cmp r1, r0 - beq .L522 + beq .L529 ldr ip, [r3, #-2016] mov r3, r4, asl #1 ldrh r0, [ip, r3] @@ -4176,14 +4236,14 @@ List_update_data_list: mvneq r0, #0 movw r1, #65535 cmp r3, r1 - bne .L524 + bne .L531 ldrh r1, [r2, r5] cmp r1, r3 - beq .L522 -.L524: + beq .L529 +.L531: mov r1, #6 mla r3, r1, r3, r2 - ldr r1, .L528+16 + ldr r1, .L535+16 rsb r2, r2, r3 mov r2, r2, asr #1 ldrh r3, [r3, #4] @@ -4195,23 +4255,23 @@ List_update_data_list: ldrh r2, [ip, r2] mulne r3, r3, r2 cmp r0, r3 - bcs .L522 - ldr r0, .L528+20 + bcs .L529 + ldr r0, .L535+20 mov r1, r4 bl List_remove_node - ldr r5, .L528 - ldr r3, .L528+24 + ldr r5, .L535 + ldr r3, .L535+24 mov r0, r4 ldrh r2, [r5, r3] sub r2, r2, #1 strh r2, [r5, r3] @ movhi bl INSERT_DATA_LIST -.L522: +.L529: mov r0, #0 ldmfd sp!, {r3, r4, r5, pc} -.L529: +.L536: .align 2 -.L528: +.L535: .word .LANCHOR2 .word -1996 .word -1948 @@ -4234,13 +4294,13 @@ ftl_map_blk_alloc_new_blk: ldrh r2, [r0, #10] mov r5, #0 ldr r3, [r0, #12] - b .L531 -.L536: + b .L538 +.L543: mov r7, r3 add r3, r3, #2 ldrh r6, [r7, #0] cmp r6, #0 - bne .L532 + bne .L539 bl FtlFreeSysBlkQueueOut movw r3, #65533 sub r2, r0, #1 @@ -4248,15 +4308,15 @@ ftl_map_blk_alloc_new_blk: strh r0, [r7, #0] @ movhi uxth r2, r2 cmp r2, r3 - bls .L533 - ldr r2, .L537 - movw r3, #4046 - ldr r0, .L537+4 + bls .L540 + ldr r2, .L544 + movw r3, #4062 + ldr r0, .L544+4 ldrh r2, [r2, r3] bl printk -.L534: - b .L534 -.L533: +.L541: + b .L541 +.L540: ldr r3, [r4, #28] strh r6, [r4, #2] @ movhi add r3, r3, #1 @@ -4265,19 +4325,19 @@ ftl_map_blk_alloc_new_blk: strh r5, [r4, #0] @ movhi add r3, r3, #1 strh r3, [r4, #8] @ movhi - b .L535 -.L532: + b .L542 +.L539: add r5, r5, #1 uxth r5, r5 -.L531: +.L538: cmp r5, r2 - bne .L536 -.L535: + bne .L543 +.L542: mov r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L538: +.L545: .align 2 -.L537: +.L544: .word .LANCHOR0 .word .LC7 .fnend @@ -4289,18 +4349,18 @@ select_l2p_ram_region: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r2, .L551 + ldr r2, .L558 movw r3, #3954 stmfd sp!, {r4, r5, r6, r7, lr} .save {r4, r5, r6, r7, lr} movw r1, #65535 ldrh r3, [r2, r3] - ldr r2, .L551+4 + ldr r2, .L558+4 ldr ip, [r2, #-1852] mov r2, #0 mov r0, r2 - b .L540 -.L542: + b .L547 +.L549: add r2, r2, #12 add r4, ip, r2 ldrh r4, [r4, #-12] @@ -4308,59 +4368,59 @@ select_l2p_ram_region: ldmeqfd sp!, {r4, r5, r6, r7, pc} add r0, r0, #1 uxth r0, r0 -.L540: +.L547: cmp r0, r3 - bne .L542 + bne .L549 mov r1, #0 mov r0, r3 mov r5, #-2147483648 mov r2, r1 - b .L543 -.L545: + b .L550 +.L552: add r4, ip, r1 ldr r4, [r4, #4] cmp r4, #0 - blt .L544 + blt .L551 cmp r4, r5 movcc r5, r4 movcc r0, r2 -.L544: +.L551: add r2, r2, #1 add r1, r1, #12 uxth r2, r2 -.L543: +.L550: cmp r2, r3 - bne .L545 + bne .L552 cmp r0, r3 ldmccfd sp!, {r4, r5, r6, r7, pc} - ldr r2, .L551+8 + ldr r2, .L558+8 mov r0, r3 - ldr r1, .L551+4 + ldr r1, .L558+4 mvn r4, #0 ldrh r6, [r1, r2] mov r2, #0 mov r1, r2 - b .L546 -.L548: + b .L553 +.L555: add r5, ip, r2 ldr r5, [r5, #4] cmp r5, r4 - bcs .L547 + bcs .L554 ldrh r7, [ip, r2] cmp r7, r6 movne r4, r5 movne r0, r1 -.L547: +.L554: add r1, r1, #1 add r2, r2, #12 uxth r1, r1 -.L546: +.L553: cmp r1, r3 - bne .L548 + bne .L555 ldmfd sp!, {r4, r5, r6, r7, pc} -.L552: +.L559: .align 2 -.L551: +.L558: .word .LANCHOR0 .word .LANCHOR2 .word -1848 @@ -4373,8 +4433,8 @@ FtlUpdateVaildLpn: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L559 - ldr r2, .L559+4 + ldr r3, .L566 + ldr r2, .L566+4 stmfd sp!, {r4, r5, lr} .save {r4, r5, lr} ldrh r1, [r2, r3] @@ -4382,11 +4442,11 @@ FtlUpdateVaildLpn: add ip, r1, #1 mov r1, r3 strh ip, [r2, r3] @ movhi - bhi .L554 + bhi .L561 cmp r0, #0 ldmeqfd sp!, {r4, r5, pc} -.L554: - ldr r0, .L559+8 +.L561: + ldr r0, .L566+8 mov r3, #0 strh r3, [r2, r1] @ movhi mov r1, #3856 @@ -4394,9 +4454,9 @@ FtlUpdateVaildLpn: movw ip, #65535 ldrh r4, [r0, r1] ldr r1, [r2, #-2016] - ldr r2, .L559+4 - b .L556 -.L558: + ldr r2, .L566+4 + b .L563 +.L565: ldrh r0, [r1], #2 add r3, r3, #1 cmp r0, ip @@ -4404,13 +4464,13 @@ FtlUpdateVaildLpn: ldrne r5, [r2, #-1844] addne r0, r0, r5 strne r0, [r2, #-1844] -.L556: +.L563: cmp r3, r4 - bne .L558 + bne .L565 ldmfd sp!, {r4, r5, pc} -.L560: +.L567: .align 2 -.L559: +.L566: .word -1846 .word .LANCHOR2 .word .LANCHOR0 @@ -4424,7 +4484,7 @@ ftl_set_blk_mode: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L565 + ldr r3, .L572 mov r2, r0, lsr #5 cmp r1, #0 and r0, r0, #31 @@ -4436,9 +4496,9 @@ ftl_set_blk_mode: biceq r0, r1, ip, asl r0 str r0, [r3, r2, asl #2] bx lr -.L566: +.L573: .align 2 -.L565: +.L572: .word .LANCHOR2 .fnend .size ftl_set_blk_mode, .-ftl_set_blk_mode @@ -4450,7 +4510,7 @@ ftl_get_blk_mode: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L568 + ldr r3, .L575 mov r2, r0, lsr #5 and r0, r0, #31 ldr r3, [r3, #-1840] @@ -4458,9 +4518,9 @@ ftl_get_blk_mode: mov r0, r3, lsr r0 and r0, r0, #1 bx lr -.L569: +.L576: .align 2 -.L568: +.L575: .word .LANCHOR2 .fnend .size ftl_get_blk_mode, .-ftl_get_blk_mode @@ -4471,7 +4531,7 @@ ftl_sb_update_avl_pages: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr ip, .L577 + ldr ip, .L584 mov r3, #0 strh r3, [r0, #4] @ movhi movw r3, #3848 @@ -4479,8 +4539,8 @@ ftl_sb_update_avl_pages: .save {r4, r5, r6, lr} ldrh r3, [ip, r3] movw ip, #65535 - b .L571 -.L573: + b .L578 +.L580: add r4, r0, r2, asl #1 add r2, r2, #1 ldrh r4, [r4, #16] @@ -4489,18 +4549,18 @@ ftl_sb_update_avl_pages: ldrneh r4, [r0, #4] addne r4, r4, #1 strneh r4, [r0, #4] @ movhi -.L571: +.L578: cmp r2, r3 - bcc .L573 - ldr ip, .L577 + bcc .L580 + ldr ip, .L584 movw r2, #3916 movw r4, #65535 mvn r1, r1 ldrh r5, [ip, r2] mov ip, r0 mov r2, #0 - b .L574 -.L576: + b .L581 +.L583: ldrh r6, [ip, #16] add r2, r2, #1 add ip, ip, #2 @@ -4510,13 +4570,13 @@ ftl_sb_update_avl_pages: addne r6, r5, r6 addne r6, r6, r1 strneh r6, [r0, #4] @ movhi -.L574: +.L581: cmp r2, r3 - bne .L576 + bne .L583 ldmfd sp!, {r4, r5, r6, pc} -.L578: +.L585: .align 2 -.L577: +.L584: .word .LANCHOR0 .fnend .size ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages @@ -4531,13 +4591,13 @@ make_superblock: .save {r4, r5, r6, r7, r8, r9, sl, lr} mov r4, r0 mov r5, #0 - ldr r6, .L585 + ldr r6, .L592 strh r5, [r0, #4] @ movhi movw r8, #3848 strb r5, [r4, #7] mvn r7, #0 - b .L580 -.L582: + b .L587 +.L589: add r3, r6, r5 ldrh r1, [r4, #0] add sl, r5, #8 @@ -4554,42 +4614,40 @@ make_superblock: ldreqb r3, [r4, #7] @ zero_extendqisi2 addeq r3, r3, #1 streqb r3, [r4, #7] -.L580: +.L587: ldrh r2, [r6, r8] - ldr r3, .L585 + ldr r3, .L592 cmp r2, r5 - bhi .L582 + bhi .L589 movw r1, #3916 ldrb r2, [r4, #7] @ zero_extendqisi2 ldrh r1, [r3, r1] - ldr r3, [r3, #3840] mul r2, r1, r2 strh r2, [r4, #4] @ movhi mov r2, #0 - cmp r3, r2 strb r2, [r4, #9] - beq .L583 - ldr r2, .L585+4 - ldrh r3, [r4, #0] - ldr r2, [r2, #-2080] - mov r3, r3, asl #1 + ldr r2, [r3, #3840] + cmp r2, #0 + beq .L590 + ldrh r1, [r4, #0] + ldr r2, [r3, #4048] + mov r3, r1, asl #1 ldrh r3, [r2, r3] cmp r3, #59 movls r3, #1 strlsb r3, [r4, #9] -.L583: - ldr r3, .L585 +.L590: + ldr r3, .L592 mov r0, #0 ldrb r3, [r3, #852] @ zero_extendqisi2 cmp r3, #0 movne r3, #1 strneb r3, [r4, #9] ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L586: +.L593: .align 2 -.L585: +.L592: .word .LANCHOR0 - .word .LANCHOR2 .fnend .size make_superblock, .-make_superblock .align 2 @@ -4604,11 +4662,11 @@ update_multiplier_value: mov r4, #0 mov r7, r0 mov r5, r4 - ldr r6, .L592 + ldr r6, .L599 movw sl, #3848 movw r8, #3916 - b .L588 -.L590: + b .L595 +.L597: add r3, r6, r5 mov r1, r7 add r5, r5, #1 @@ -4620,27 +4678,27 @@ update_multiplier_value: ldreqh r3, [r6, r8] addeq r4, r4, r3 uxtheq r4, r4 -.L588: +.L595: ldrh r3, [r6, sl] cmp r3, r5 - bhi .L590 + bhi .L597 cmp r4, #0 - beq .L591 + beq .L598 mov r1, r4 mov r0, #32768 bl __aeabi_idiv uxth r4, r0 -.L591: - ldr r3, .L592+4 +.L598: + ldr r3, .L599+4 mov r2, #6 mov r0, #0 ldr r3, [r3, #-2024] mla r7, r2, r7, r3 strh r4, [r7, #4] @ movhi ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L593: +.L600: .align 2 -.L592: +.L599: .word .LANCHOR0 .word .LANCHOR2 .fnend @@ -4653,24 +4711,26 @@ GetFreeBlockMinEraseCount: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L597 + ldr r3, .L604 ldr r0, [r3, #-2004] cmp r0, #0 bxeq lr - ldr r2, [r3, #-2024] - rsb r0, r2, r0 - ldr r2, .L597+4 + ldr r3, [r3, #-2024] + ldr r2, .L604+4 + rsb r0, r3, r0 + ldr r3, .L604+8 mov r0, r0, asr #1 - mul r0, r2, r0 - ldr r2, [r3, #-2080] - uxth r0, r0 - mov r3, r0, asl #1 + ldr r2, [r2, #4048] + mul r3, r3, r0 + uxth r3, r3 + mov r3, r3, asl #1 ldrh r0, [r2, r3] bx lr -.L598: +.L605: .align 2 -.L597: +.L604: .word .LANCHOR2 + .word .LANCHOR0 .word -1431655765 .fnend .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount @@ -4681,13 +4741,13 @@ GetFreeBlockMaxEraseCount: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r2, .L606 + ldr r2, .L613 stmfd sp!, {r4, r5, lr} .save {r4, r5, lr} ldr r3, [r2, #-2004] cmp r3, #0 - beq .L605 - ldr r1, .L606+4 + beq .L612 + ldr r1, .L613+4 mov ip, #7 mov r5, #6 movw r4, #65535 @@ -4697,39 +4757,40 @@ GetFreeBlockMaxEraseCount: cmp r0, r1 uxthgt r0, r1 ldr r1, [r2, #-2024] - ldr r2, .L606+8 + ldr r2, .L613+8 rsb r3, r1, r3 mov r3, r3, asr #1 mul r3, r2, r3 mov r2, #0 uxth r3, r3 - b .L602 -.L604: + b .L609 +.L611: mul ip, r5, r3 ldrh ip, [r1, ip] cmp ip, r4 - beq .L603 + beq .L610 add r2, r2, #1 mov r3, ip uxth r2, r2 -.L602: +.L609: cmp r2, r0 - bne .L604 -.L603: - ldr r2, .L606 + bne .L611 +.L610: + ldr r2, .L613+12 mov r3, r3, asl #1 - ldr r2, [r2, #-2080] + ldr r2, [r2, #4048] ldrh r0, [r2, r3] ldmfd sp!, {r4, r5, pc} -.L605: +.L612: mov r0, r3 ldmfd sp!, {r4, r5, pc} -.L607: +.L614: .align 2 -.L606: +.L613: .word .LANCHOR2 .word -2000 .word -1431655765 + .word .LANCHOR0 .fnend .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount .align 2 @@ -4742,27 +4803,27 @@ FtlPrintInfo2buf: stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} .save {r4, r5, r6, r7, r8, r9, sl, lr} mov sl, r0 - ldr r5, .L618 + ldr r6, .L625 add r4, sl, #12 .pad #32 sub sp, sp, #32 - ldr r1, .L618+4 + ldr r1, .L625+4 bl strcpy mov r0, r4 - ldr r1, .L618+8 - ldr r2, [r5, #3048] + ldr r1, .L625+8 + ldr r2, [r6, #3048] bl sprintf - ldr r1, .L618+12 - ldr r2, [r5, #3932] + ldr r1, .L625+12 + ldr r2, [r6, #3932] add r4, r4, r0 mov r0, r4 bl sprintf - ldr r3, .L618+16 + ldr r3, .L625+16 ldr r3, [r3, #2996] cmp r3, #1 add r4, r4, r0 - rsbne r0, sl, r4 - bne .L610 + bne .L621 +.L616: add r0, sp, #16 add r1, sp, #20 add r2, sp, #24 @@ -4771,467 +4832,469 @@ FtlPrintInfo2buf: ldr r3, [sp, #24] ldr r2, [sp, #16] mov r0, r4 - ldr r1, .L618+20 + ldr r1, .L625+20 str r3, [sp, #0] ldr r3, [sp, #28] - ldr r8, .L618+24 + ldr r5, .L625+24 + ldr r7, .L625+28 str r3, [sp, #4] ldr r3, [sp, #20] bl sprintf - ldr r1, .L618+28 - add r6, r4, r0 - ldr r4, .L618+32 - mov r0, r6 - add r6, r6, #10 + ldr r1, .L625+32 + ldr r8, .L625+36 + add r4, r4, r0 + mov r0, r4 + add r4, r4, #10 bl strcpy - ldr r2, [r5, #3976] - mov r0, r6 - ldr r1, .L618+36 + ldr r1, .L625+40 + mov r0, r4 + ldr r2, [r6, #3976] bl sprintf - ldr r1, .L618+40 - ldr r2, [r4, #-1844] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+44 + ldr r2, [r5, #-1844] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+44 - ldr r2, [r4, #-1836] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+48 + ldr r2, [r5, #-1836] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+48 - ldr r2, [r4, #-1832] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+52 + ldr r2, [r5, #-1832] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+52 - ldr r2, [r4, #-1828] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+56 + ldr r2, [r5, #-1828] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+56 - ldr r2, [r4, #-1824] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+60 + ldr r2, [r5, #-1824] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+60 - ldr r2, [r4, #-1820] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+64 + ldr r2, [r5, #-1820] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+64 - ldr r2, [r4, #-1816] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+68 + ldr r2, [r5, #-1816] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r2, [r4, #-1812] - ldr r1, .L618+68 + ldr r2, [r5, #-1812] + ldr r1, .L625+72 mov r2, r2, lsr #11 - add r6, r6, r0 - mov r0, r6 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r2, [r4, #-1808] - ldr r1, .L618+72 + ldr r2, [r5, #-1808] + ldr r1, .L625+76 mov r2, r2, lsr #11 - add r6, r6, r0 - mov r0, r6 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+76 - ldr r2, [r4, #-1804] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+80 + ldr r2, [r5, #-1804] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+80 - ldr r2, [r4, #-1800] - add r6, r6, r0 - mov r0, r6 + ldr r1, .L625+84 + ldr r2, [r5, #-1800] + add r4, r4, r0 + mov r0, r4 bl sprintf - add r6, r6, r0 + add r4, r4, r0 bl FtlBbtCalcTotleCnt movw r2, #3986 - ldr r1, .L618+84 - ldrh r2, [r5, r2] + ldr r1, .L625+88 + ldrh r2, [r6, r2] mov r3, r0 - mov r0, r6 + mov r0, r4 bl sprintf - ldr r1, .L618+88 - add r7, r6, r0 - ldr r6, .L618+92 - mov r0, r7 - ldrh r2, [r4, r6] + ldr r1, .L625+92 + ldrh r2, [r5, r7] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+96 - ldr r2, [r4, #-1796] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+96 + ldr r2, [r5, #-1796] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+100 - ldr r2, [r4, #-1792] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+100 + ldr r2, [r5, #-1792] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+104 - ldr r2, [r4, #-1788] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+104 + ldr r2, [r5, #-1788] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+108 - ldr r2, [r4, #-2076] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+108 + ldr r2, [r6, #4052] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+112 - ldr r2, [r4, #-1784] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+112 + ldr r2, [r5, #-1784] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+116 - ldr r2, [r4, #-1780] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+116 + ldr r2, [r5, #-1780] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+120 - ldr r1, .L618+124 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+120 + ldr r1, .L625+124 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+128 - ldr r1, .L618+132 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+128 + ldr r1, .L625+132 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r2, [r5, #3956] - ldr r1, .L618+136 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+136 + ldr r2, [r6, #3956] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r2, [r5, #3948] - ldr r1, .L618+140 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+140 + ldr r2, [r6, #3948] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r2, [r5, #3844] - ldr r1, .L618+144 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+144 + ldr r2, [r6, #3844] + add r4, r4, r0 + mov r0, r4 bl sprintf - movw r3, #4046 - ldrh r2, [r5, r3] - ldr r1, .L618+148 - add r7, r7, r0 - mov r0, r7 + movw r3, #4062 + ldrh r2, [r6, r3] + ldr r1, .L625+148 + add r4, r4, r0 + mov r0, r4 bl sprintf mov r3, #3856 - ldrh r2, [r5, r3] - ldr r1, .L618+152 - add r7, r7, r0 - mov r0, r7 + ldrh r2, [r6, r3] + ldr r1, .L625+152 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+156 - ldr r1, .L618+160 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+156 + ldr r1, .L625+160 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r2, [r5, #3860] - ldr r1, .L618+164 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+164 + ldr r2, [r6, #3860] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+168 - ldr r1, .L618+172 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+168 + ldr r1, .L625+172 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf movw r3, #3980 - ldrh r2, [r5, r3] - ldr r1, .L618+176 - add r7, r7, r0 - mov r0, r7 + ldrh r2, [r6, r3] + ldr r1, .L625+176 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+180 - ldr r1, .L618+184 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+180 + ldr r1, .L625+184 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+188 - ldrb r2, [r4, #-1990] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+188 + ldrb r2, [r5, #-1990] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldrh r2, [r4, r8] - ldr r1, .L618+192 - add r7, r7, r0 - mov r0, r7 + ldrh r2, [r5, r8] + ldr r1, .L625+192 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+196 - ldrb r2, [r4, #-1988] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+196 + ldrb r2, [r5, #-1988] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+200 - ldr r1, .L618+204 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+200 + ldr r1, .L625+204 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldrh r3, [r4, r8] - ldr r2, [r4, #-2016] + ldrh r3, [r5, r8] + ldr r2, [r5, #-2016] add r8, r8, #48 - ldr r1, .L618+208 + ldr r1, .L625+208 mov r3, r3, asl #1 ldrh r2, [r2, r3] - add r7, r7, r0 - mov r0, r7 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+212 - ldr r1, .L618+216 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+212 + ldr r1, .L625+216 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+220 - ldrb r2, [r4, #-1942] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+220 + ldrb r2, [r5, #-1942] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldrh r2, [r4, r8] - ldr r1, .L618+224 - add r7, r7, r0 - mov r0, r7 + ldrh r2, [r5, r8] + ldr r1, .L625+224 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+228 - ldrb r2, [r4, #-1940] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+228 + ldrb r2, [r5, #-1940] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+232 - ldr r1, .L618+236 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+232 + ldr r1, .L625+236 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldrh r3, [r4, r8] - ldr r2, [r4, #-2016] + ldrh r3, [r5, r8] + ldr r2, [r5, #-2016] add r8, r8, #188 - ldr r1, .L618+240 + ldr r1, .L625+240 mov r3, r3, asl #1 ldrh r2, [r2, r3] - add r7, r7, r0 - mov r0, r7 - bl sprintf - ldr r3, .L618+244 - ldr r1, .L618+248 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+252 - ldrb r2, [r4, #-1894] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+244 + ldr r1, .L625+248 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+256 - ldr r1, .L618+260 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+252 + ldrb r2, [r5, #-1894] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+264 - ldrb r2, [r4, #-1892] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+256 + ldr r1, .L625+260 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+268 - ldr r1, .L618+272 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+264 + ldrb r2, [r5, #-1892] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+276 - ldr r1, .L618+280 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+268 + ldr r1, .L625+272 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+284 - ldrb r2, [r4, #-1754] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r3, .L625+276 + ldr r1, .L625+280 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+288 - ldrh r2, [r4, r8] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+284 + ldrb r2, [r5, #-1754] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+292 - ldrb r2, [r4, #-1752] @ zero_extendqisi2 - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+288 + ldrh r2, [r5, r8] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+296 - ldr r1, .L618+300 - ldrh r2, [r4, r3] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+292 + ldrb r2, [r5, #-1752] @ zero_extendqisi2 + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, [r4, #-1624] - ldr r3, [r5, #3840] - ldr r2, [r4, #-1712] + ldr r3, .L625+296 + ldr r1, .L625+300 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 + bl sprintf + ldr r1, [r5, #-1624] + ldr r3, [r6, #3840] + ldr r2, [r5, #-1712] str r1, [sp, #0] - ldr r1, [r4, #-1632] + ldr r1, [r5, #-1632] orr r2, r3, r2, asl #8 str r1, [sp, #4] - ldr r1, .L618+304 - ldr r3, [r4, #-1628] - add r7, r7, r0 - mov r0, r7 + ldr r1, .L625+304 + ldr r3, [r5, #-1628] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+308 - ldr r2, [r4, #-1636] - add r5, r7, r0 - mov r0, r5 + ldr r1, .L625+308 + ldr r2, [r5, #-1636] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+312 - ldr r2, [r4, #-1612] - add r5, r5, r0 - mov r0, r5 + ldr r1, .L625+312 + ldr r2, [r5, #-1612] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+316 - ldr r1, .L618+320 - ldrh r2, [r4, r3] - add r5, r5, r0 - mov r0, r5 + ldr r3, .L625+316 + ldr r1, .L625+320 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+324 - ldr r1, .L618+328 - ldrh r2, [r4, r3] - add r5, r5, r0 - mov r0, r5 + ldr r3, .L625+324 + ldr r1, .L625+328 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r1, .L618+332 - ldr r2, [r4, #-1192] - add r5, r5, r0 - mov r0, r5 + ldr r1, .L625+332 + ldr r2, [r5, #-1192] + add r4, r4, r0 + mov r0, r4 bl sprintf - ldr r3, .L618+336 - ldr r1, .L618+340 - ldrh r2, [r4, r3] - add r5, r5, r0 - mov r0, r5 + ldr r3, .L625+336 + ldr r1, .L625+340 + ldrh r2, [r5, r3] + add r4, r4, r0 + mov r0, r4 bl sprintf - add r5, r5, r0 + add r4, r4, r0 bl GetFreeBlockMinEraseCount - ldr r1, .L618+344 + ldr r1, .L625+344 mov r2, r0 - mov r0, r5 + mov r0, r4 bl sprintf - add r5, r5, r0 - ldrh r0, [r4, r6] + add r4, r4, r0 + ldrh r0, [r5, r7] bl GetFreeBlockMaxEraseCount - ldr r1, .L618+348 + ldr r1, .L625+348 mov r2, r0 - mov r0, r5 + mov r0, r4 bl sprintf - ldrh r3, [r4, r8] + ldrh r3, [r5, r8] movw r2, #65535 cmp r3, r2 - add r5, r5, r0 - beq .L611 - ldr r2, [r4, #-2016] + add r4, r4, r0 + beq .L618 + ldr r2, [r5, #-2016] mov r3, r3, asl #1 - mov r0, r5 - ldr r1, .L618+352 + mov r0, r4 + ldr r1, .L625+352 ldrh r2, [r2, r3] bl sprintf - add r5, r5, r0 -.L611: + add r4, r4, r0 +.L618: mov r0, #0 - ldr r4, .L618+32 + ldr r6, .L625+24 bl List_get_gc_head_node - mov r6, #0 - movw r8, #65535 - mov r9, #6 + ldr r8, .L625 + mov r5, #0 + movw r9, #65535 uxth r3, r0 -.L613: - cmp r3, r8 - beq .L612 - ldr r1, [r4, #-2016] +.L620: + cmp r3, r9 + beq .L619 + ldr r1, [r6, #-2016] mov r2, r3, asl #1 - mul r7, r9, r3 - mov r0, r5 + mov r7, #6 + mov r0, r4 + mul r7, r7, r3 ldrh r1, [r1, r2] str r1, [sp, #0] - ldr r1, [r4, #-2024] + ldr r1, [r6, #-2024] add r1, r1, r7 ldrh r1, [r1, #4] str r1, [sp, #4] - ldr r1, [r4, #-2080] + ldr r1, [r8, #4048] ldrh r2, [r1, r2] - ldr r1, .L618+356 + ldr r1, .L625+356 str r2, [sp, #8] - mov r2, r6 + mov r2, r5 bl sprintf - add r6, r6, #1 - ldr r3, [r4, #-2024] - cmp r6, #16 + add r5, r5, #1 + ldr r3, [r6, #-2024] + cmp r5, #16 ldrh r3, [r3, r7] - add r5, r5, r0 - bne .L613 -.L612: - ldr r6, .L618+32 - mov r4, #0 - movw r8, #65535 - mov r9, #6 + add r4, r4, r0 + bne .L620 +.L619: + ldr r6, .L625+24 + mov r5, #0 + ldr r8, .L625 + movw r9, #65535 ldr r2, [r6, #-2004] ldr r3, [r6, #-2024] rsb r3, r3, r2 - ldr r2, .L618+360 + ldr r2, .L625+360 mov r3, r3, asr #1 mul r3, r2, r3 uxth r3, r3 -.L615: - cmp r3, r8 - beq .L614 - mul r7, r9, r3 +.L622: + cmp r3, r9 + beq .L621 + mov r7, #6 ldr r2, [r6, #-2024] - mov r0, r5 + mul r7, r7, r3 + mov r0, r4 add r2, r2, r7 ldrh r2, [r2, #4] str r2, [sp, #0] mov r2, r3, asl #1 - ldr r1, [r6, #-2080] + ldr r1, [r8, #4048] ldrh r2, [r1, r2] - ldr r1, .L618+364 + ldr r1, .L625+364 str r2, [sp, #4] - mov r2, r4 + mov r2, r5 bl sprintf - add r4, r4, #1 + add r5, r5, #1 ldr r3, [r6, #-2024] - cmp r4, #4 + cmp r5, #4 ldrh r3, [r3, r7] - add r5, r5, r0 - bne .L615 -.L614: - rsb r0, sl, r5 -.L610: + add r4, r4, r0 + bne .L622 +.L621: + rsb r0, sl, r4 add sp, sp, #32 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L619: +.L626: .align 2 -.L618: +.L625: .word .LANCHOR0 .word .LC8 .word .LC9 .word .LC10 .word .LANCHOR1 .word .LC11 - .word -1996 - .word .LC12 .word .LANCHOR2 + .word -2000 + .word .LC12 + .word -1996 .word .LC13 .word .LC14 .word .LC15 @@ -5246,7 +5309,6 @@ FtlPrintInfo2buf: .word .LC24 .word .LC25 .word .LC26 - .word -2000 .word .LC27 .word .LC28 .word .LC29 @@ -5327,8 +5389,8 @@ ftl_proc_ftl_read: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r4, r0 - ldr r1, .L621 - ldr r2, .L621+4 + ldr r1, .L628 + ldr r2, .L628+4 bl sprintf add r5, r4, r0 mov r0, r5 @@ -5336,9 +5398,9 @@ ftl_proc_ftl_read: add r0, r5, r0 rsb r0, r4, r0 ldmfd sp!, {r3, r4, r5, pc} -.L622: +.L629: .align 2 -.L621: +.L628: .word .LC78 .word .LC79 .fnend @@ -5350,7 +5412,7 @@ GetSwlReplaceBlock: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L648 + ldr r3, .L655 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} .pad #20 @@ -5358,28 +5420,28 @@ GetSwlReplaceBlock: ldr r1, [r3, #-1788] ldr r2, [r3, #-1780] cmp r1, r2 - bcs .L624 - ldr r0, .L648+4 + bcs .L631 + ldr r0, .L655+4 mov r1, #3856 mov r2, #0 str r2, [r3, #-1796] ldrh r1, [r0, r1] - ldr r0, [r3, #-2080] - b .L625 -.L626: + ldr r0, [r0, #4048] + b .L632 +.L633: ldrh lr, [r0], #2 add r2, r2, #1 ldr ip, [r3, #-1796] add ip, lr, ip str ip, [r3, #-1796] -.L625: +.L632: cmp r2, r1 - ldr r4, .L648 - bcc .L626 + ldr r4, .L655 + bcc .L633 ldr r5, [r4, #-1796] mov r0, r5 bl __aeabi_uidiv - ldr r2, .L648+4 + ldr r2, .L655+4 movw r3, #3906 ldrh r1, [r2, r3] str r0, [r4, #-1788] @@ -5387,48 +5449,48 @@ GetSwlReplaceBlock: rsb r0, r0, r5 bl __aeabi_uidiv str r0, [r4, #-1796] - b .L627 -.L624: + b .L634 +.L631: ldr r2, [r3, #-1784] cmp r1, r2 - bls .L627 + bls .L634 add r2, r2, #1 - ldr r4, .L648+4 - str r2, [r3, #-1784] mov ip, #3856 - mov r2, #0 - b .L628 -.L629: - ldr r0, [r3, #-2080] - mov r1, r2, asl #1 - add r2, r2, #1 - ldrh r5, [r0, r1] - add r5, r5, #1 - strh r5, [r0, r1] @ movhi -.L628: - ldrh r1, [r4, ip] - cmp r2, r1 - bcc .L629 -.L627: - ldr r3, .L648 + str r2, [r3, #-1784] + mov r3, #0 + ldr r2, .L655+4 + b .L635 +.L636: + ldr r0, [r2, #4048] + mov r1, r3, asl #1 + add r3, r3, #1 + ldrh r4, [r0, r1] + add r4, r4, #1 + strh r4, [r0, r1] @ movhi +.L635: + ldrh r1, [r2, ip] + cmp r3, r1 + bcc .L636 +.L634: + ldr r3, .L655 ldr r6, [r3, #-1780] ldr r5, [r3, #-1788] add r2, r6, #256 cmp r2, r5 mov r2, r3 - bls .L630 + bls .L637 ldr r3, [r3, #-1784] add r1, r6, #768 cmp r1, r3 - bls .L630 - ldr r3, .L648+4 + bls .L637 + ldr r3, .L655+4 ldr r3, [r3, #3840] cmp r3, #0 - beq .L647 + beq .L654 cmp r6, #30 - bhi .L647 -.L630: - ldr r3, .L648+8 + bhi .L654 +.L637: + ldr r3, .L655+8 ldrh r0, [r2, r3] add r0, r0, r0, asl #1 ubfx r0, r0, #2, #16 @@ -5436,104 +5498,105 @@ GetSwlReplaceBlock: add r3, r6, #64 cmp r0, r3 mov r8, r0 - bcs .L632 + bcs .L639 cmp r6, #30 - bhi .L647 -.L632: - ldr r2, .L648 - ldr r3, [r2, #-2020] + bhi .L654 +.L639: + ldr r1, .L655 + ldr r3, [r1, #-2020] cmp r3, #0 - beq .L647 - ldr r0, .L648+4 - mov r1, #3856 + beq .L654 + ldr r2, .L655+4 + mov r0, #3856 movw r7, #65535 mov r4, r7 mov fp, r7 - ldrh sl, [r0, r1] - ldr r0, [r2, #-2024] - ldr r1, [r2, #-2080] + ldrh sl, [r2, r0] + ldr r0, [r1, #-2024] + ldr r1, [r2, #4048] mov r2, #0 - b .L633 -.L636: + b .L640 +.L643: add r2, r2, #1 uxth r2, r2 cmp r2, sl - bhi .L647 + bhi .L654 ldrh ip, [r3, #4] cmp ip, #0 - beq .L634 + beq .L641 rsb r3, r0, r3 - ldr ip, .L648+12 + ldr ip, .L655+12 mov r3, r3, asr #1 mul r3, ip, r3 uxth r3, r3 mov ip, r3, asl #1 ldrh ip, [r1, ip] cmp ip, r6 - bls .L644 + bls .L651 cmp ip, r7 movcc r7, ip movcc r4, r3 -.L634: +.L641: mov ip, #6 mla r3, ip, r9, r0 -.L633: +.L640: ldrh r9, [r3, #0] cmp r9, fp - bne .L636 - b .L635 -.L644: + bne .L643 + b .L642 +.L651: mov r4, r3 -.L635: +.L642: movw r3, #65535 cmp r4, r3 - beq .L631 + beq .L638 mov r9, r4, asl #1 ldrh sl, [r1, r9] cmp sl, r6 - bls .L637 + bls .L644 bl GetFreeBlockMinEraseCount cmp r0, r6 - ldrhi r3, .L648 + ldrhi r3, .L655 strhi r7, [r3, #-1780] -.L637: +.L644: cmp sl, r5 - bcs .L647 + bcs .L654 add r3, sl, #128 cmp r8, r3 - ble .L647 + ble .L654 add r3, sl, #256 - ldr r6, .L648 + ldr r6, .L655 cmp r3, r5 - bcc .L638 + bcc .L645 ldr r3, [r6, #-1784] add sl, sl, #768 cmp sl, r3 - bcs .L647 -.L638: + bcs .L654 +.L645: ldr r3, [r6, #-2016] mov r1, r4 - ldr r0, .L648+16 + ldr r0, .L655+16 mov r2, r5 ldrh r3, [r3, r9] str r3, [sp, #0] - ldr r3, [r6, #-2080] + ldr r3, .L655+4 + ldr r3, [r3, #4048] ldrh r3, [r3, r9] stmib sp, {r3, r8} ldr r3, [r6, #-1784] bl printk mov r3, #1 str r3, [r6, #-1184] - b .L631 -.L647: + b .L638 +.L654: movw r4, #65535 -.L631: +.L638: mov r0, r4 add sp, sp, #20 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L649: +.L656: .align 2 -.L648: +.L655: .word .LANCHOR2 .word .LANCHOR0 .word -2000 @@ -5552,19 +5615,19 @@ free_data_superblock: cmp r0, r2 stmfd sp!, {r3, lr} .save {r3, lr} - beq .L651 - ldr r2, .L652 + beq .L658 + ldr r2, .L659 mov r3, r0, asl #1 mov r1, #0 ldr r2, [r2, #-2016] strh r1, [r2, r3] @ movhi bl INSERT_FREE_LIST -.L651: +.L658: mov r0, #0 ldmfd sp!, {r3, pc} -.L653: +.L660: .align 2 -.L652: +.L659: .word .LANCHOR2 .fnend .size free_data_superblock, .-free_data_superblock @@ -5575,19 +5638,19 @@ FtlGcBufInit: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r2, .L662 + ldr r2, .L669 mov r3, #0 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} movw sl, #3848 str r3, [r2, #-1180] mov r8, #12 - ldr r0, .L662+4 + ldr r0, .L669+4 mov r7, #1 movw r6, #3926 movw fp, #3928 - b .L655 -.L656: + b .L662 +.L663: mul r1, r8, r3 ldr r4, [r2, #-1176] add ip, r4, r1 @@ -5621,12 +5684,12 @@ FtlGcBufInit: str r1, [ip, #8] ldr r1, [r4, #4] str r1, [ip, #12] -.L655: +.L662: ldrh r1, [r0, sl] cmp r3, r1 - bcc .L656 - b .L661 -.L658: + bcc .L663 + b .L668 +.L665: mul r2, r8, r1 ldr r4, [r3, #-1176] add r0, r4, r2 @@ -5653,22 +5716,22 @@ FtlGcBufInit: bic r2, r2, #3 add r2, r4, r2 str r2, [r0, #4] - b .L660 -.L661: - ldr r3, .L662 + b .L667 +.L668: + ldr r3, .L669 mov r8, #12 - ldr ip, .L662+4 + ldr ip, .L669+4 mov r7, #0 movw r6, #3926 movw r5, #3928 -.L660: +.L667: ldr r2, [r3, #-1160] cmp r1, r2 - bcc .L658 + bcc .L665 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L663: +.L670: .align 2 -.L662: +.L669: .word .LANCHOR2 .word .LANCHOR0 .fnend @@ -5680,7 +5743,7 @@ FtlGcBufFree: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L671 + ldr r3, .L678 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r5, #36 @@ -5689,33 +5752,33 @@ FtlGcBufFree: ldr ip, [r3, #-1176] mov r3, #0 mov r4, r3 - b .L665 -.L668: + b .L672 +.L675: mul sl, fp, r2 add r8, ip, sl ldr r9, [ip, sl] ldr sl, [r7, #8] cmp r9, sl streq r4, [r8, #8] - beq .L667 -.L666: + beq .L674 +.L673: add r2, r2, #1 uxth r2, r2 -.L670: +.L677: cmp r2, r6 - bcc .L668 -.L667: + bcc .L675 +.L674: add r3, r3, #1 uxth r3, r3 -.L665: +.L672: cmp r3, r1 ldmcsfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} mla r7, r5, r3, r0 mov r2, #0 - b .L670 -.L672: + b .L677 +.L679: .align 2 -.L671: +.L678: .word .LANCHOR2 .fnend .size FtlGcBufFree, .-FtlGcBufFree @@ -5726,7 +5789,7 @@ FtlGcBufAlloc: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L680 + ldr r3, .L687 stmfd sp!, {r4, r5, r6, r7, r8, sl, lr} .save {r4, r5, r6, r7, r8, sl, lr} mov r6, #12 @@ -5735,38 +5798,38 @@ FtlGcBufAlloc: ldr r7, [r3, #-1176] mov r4, #36 mov r3, #0 - b .L674 -.L677: + b .L681 +.L684: mla ip, r6, r2, r7 ldr sl, [ip, #8] cmp sl, #0 - bne .L675 + bne .L682 mla r2, r4, r3, r0 ldr sl, [ip, #0] str r5, [ip, #8] str sl, [r2, #8] ldr ip, [ip, #4] str ip, [r2, #12] - b .L676 -.L675: + b .L683 +.L682: add r2, r2, #1 uxth r2, r2 - b .L678 -.L679: + b .L685 +.L686: mov r2, #0 -.L678: +.L685: cmp r2, r8 - bcc .L677 -.L676: + bcc .L684 +.L683: add r3, r3, #1 uxth r3, r3 -.L674: +.L681: cmp r3, r1 - bcc .L679 + bcc .L686 ldmfd sp!, {r4, r5, r6, r7, r8, sl, pc} -.L681: +.L688: .align 2 -.L680: +.L687: .word .LANCHOR2 .fnend .size FtlGcBufAlloc, .-FtlGcBufAlloc @@ -5778,29 +5841,29 @@ IsBlkInGcList: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L687 - ldr r2, .L687+4 + ldr r3, .L694 + ldr r2, .L694+4 ldrh r1, [r3, r2] ldr r2, [r3, #-1152] mov r3, #0 - b .L683 -.L685: + b .L690 +.L692: ldrh ip, [r2], #2 cmp ip, r0 - beq .L686 + beq .L693 add r3, r3, #1 uxth r3, r3 -.L683: +.L690: cmp r3, r1 - bne .L685 + bne .L692 mov r0, #0 bx lr -.L686: +.L693: mov r0, #1 bx lr -.L688: +.L695: .align 2 -.L687: +.L694: .word .LANCHOR2 .word -1156 .fnend @@ -5819,33 +5882,33 @@ FtlGcUpdatePage: mov r5, r1 mov r6, r2 bl P2V_block_in_plane - ldr r3, .L693 - ldr r2, .L693+4 + ldr r3, .L700 + ldr r2, .L700+4 ldrh ip, [r3, r2] ldr r2, [r3, #-1152] mov r3, #0 mov r1, r2 - b .L690 -.L692: + b .L697 +.L699: ldrh r7, [r1], #2 cmp r7, r0 - beq .L691 + beq .L698 add r3, r3, #1 uxth r3, r3 -.L690: +.L697: cmp r3, ip - bne .L692 + bne .L699 mov r3, r3, asl #1 strh r0, [r2, r3] @ movhi - ldr r2, .L693 - ldr r3, .L693+4 + ldr r2, .L700 + ldr r3, .L700+4 ldrh r1, [r2, r3] add r1, r1, #1 strh r1, [r2, r3] @ movhi -.L691: - ldr r3, .L693 +.L698: + ldr r3, .L700 mov r0, #12 - ldr r2, .L693+8 + ldr r2, .L700+8 ldrh r1, [r3, r2] mul r1, r0, r1 ldr r0, [r3, #-1148] @@ -5856,9 +5919,9 @@ FtlGcUpdatePage: add r1, r1, #1 strh r1, [r3, r2] @ movhi ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L694: +.L701: .align 2 -.L693: +.L700: .word .LANCHOR2 .word -1156 .word -1144 @@ -5875,29 +5938,29 @@ FtlGcRefreshOpenBlock: .save {r3, r4, r5, lr} mov r4, r0 mov r1, r4 - ldr r0, .L698 + ldr r0, .L705 bl printk - ldr r3, .L698+4 - ldr ip, .L698+8 + ldr r3, .L705+4 + ldr ip, .L705+8 ldrh r5, [r3, ip] cmp r5, r4 - beq .L696 - ldr r2, .L698+12 + beq .L703 + ldr r2, .L705+12 ldrh r0, [r3, r2] cmp r0, r4 - beq .L696 + beq .L703 movw r1, #65535 cmp r5, r1 streqh r4, [r3, ip] @ movhi - beq .L696 + beq .L703 cmp r0, r1 streqh r4, [r3, r2] @ movhi -.L696: +.L703: mov r0, #0 ldmfd sp!, {r3, r4, r5, pc} -.L699: +.L706: .align 2 -.L698: +.L705: .word .LC81 .word .LANCHOR2 .word -1142 @@ -5915,29 +5978,29 @@ FtlGcRefreshBlock: .save {r3, r4, r5, lr} mov r4, r0 mov r1, r4 - ldr r0, .L703 + ldr r0, .L710 bl printk - ldr r3, .L703+4 - ldr ip, .L703+8 + ldr r3, .L710+4 + ldr ip, .L710+8 ldrh r5, [r3, ip] cmp r5, r4 - beq .L701 - ldr r2, .L703+12 + beq .L708 + ldr r2, .L710+12 ldrh r0, [r3, r2] cmp r0, r4 - beq .L701 + beq .L708 movw r1, #65535 cmp r5, r1 streqh r4, [r3, ip] @ movhi - beq .L701 + beq .L708 cmp r0, r1 streqh r4, [r3, r2] @ movhi -.L701: +.L708: mov r0, #0 ldmfd sp!, {r3, r4, r5, pc} -.L704: +.L711: .align 2 -.L703: +.L710: .word .LC81 .word .LANCHOR2 .word -1142 @@ -5955,54 +6018,54 @@ FtlGcMarkBadPhyBlk: .save {r3, r4, r5, r6, r7, lr} mov r4, r0 bl P2V_block_in_plane - ldr r7, .L710 + ldr r7, .L717 mov r2, r4 - ldr r6, .L710+4 + ldr r6, .L717+4 ldrh r1, [r7, r6] mov r5, r0 - ldr r0, .L710+8 + ldr r0, .L717+8 bl printk mov r0, r5 bl FtlGcRefreshBlock - ldr r3, .L710+12 - ldr r3, [r3, #3840] - cmp r3, #0 - beq .L706 - ldr r3, [r7, #-2080] + ldr r3, .L717+12 + ldr r2, [r3, #3840] + cmp r2, #0 + beq .L713 + ldr r3, [r3, #4048] mov r5, r5, asl #1 ldrh r2, [r3, r5] cmp r2, #29 subhi r2, r2, #30 strhih r2, [r3, r5] @ movhi -.L706: +.L713: ldrh r1, [r7, r6] mov r3, #0 - ldr r2, .L710+16 - b .L707 -.L709: + ldr r2, .L717+16 + b .L714 +.L716: ldrh r0, [r2, #2]! cmp r0, r4 - beq .L708 + beq .L715 add r3, r3, #1 uxth r3, r3 -.L707: +.L714: cmp r3, r1 - bne .L709 + bne .L716 cmp r3, #15 - bhi .L708 - ldr r2, .L710 + bhi .L715 + ldr r2, .L717 add r1, r2, r3, asl #1 add r3, r3, #1 sub r1, r1, #1136 strh r4, [r1, #0] @ movhi - ldr r1, .L710+4 + ldr r1, .L717+4 strh r3, [r2, r1] @ movhi -.L708: +.L715: mov r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L711: +.L718: .align 2 -.L710: +.L717: .word .LANCHOR2 .word -1138 .word .LC82 @@ -6019,18 +6082,18 @@ FtlGcReFreshBadBlk: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} - ldr r2, .L715 - ldr r3, .L715+4 + ldr r2, .L722 + ldr r3, .L722+4 ldrh r2, [r3, r2] cmp r2, #0 - beq .L713 - ldr r1, .L715+8 + beq .L720 + ldr r1, .L722+8 ldrh r0, [r3, r1] movw r1, #65535 cmp r0, r1 - bne .L713 - ldr r4, .L715+12 - ldr r5, .L715+4 + bne .L720 + ldr r4, .L722+12 + ldr r5, .L722+4 ldrh r1, [r3, r4] cmp r1, r2 movcs r2, #0 @@ -6044,12 +6107,12 @@ FtlGcReFreshBadBlk: ldrh r3, [r5, r4] add r3, r3, #1 strh r3, [r5, r4] @ movhi -.L713: +.L720: mov r0, #0 ldmfd sp!, {r3, r4, r5, pc} -.L716: +.L723: .align 2 -.L715: +.L722: .word -1138 .word .LANCHOR2 .word -1142 @@ -6067,9 +6130,9 @@ ftl_memset: stmfd sp!, {r4, lr} .save {r4, lr} mov r4, r0 - beq .L718 + beq .L725 bl memset -.L718: +.L725: mov r0, r4 ldmfd sp!, {r4, pc} .fnend @@ -6084,11 +6147,11 @@ FtlGcPageVarInit: stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} mov r3, #0 - ldr r4, .L720 + ldr r4, .L727 mov r5, #3920 - ldr r2, .L720+4 + ldr r2, .L727+4 mov r1, #255 - ldr r6, .L720+8 + ldr r6, .L727+8 ldr r0, [r4, #-1152] strh r3, [r4, r2] @ movhi add r2, r2, #12 @@ -6104,9 +6167,9 @@ FtlGcPageVarInit: bl ftl_memset ldmfd sp!, {r4, r5, r6, lr} b FtlGcBufInit -.L721: +.L728: .align 2 -.L720: +.L727: .word .LANCHOR2 .word -1156 .word .LANCHOR0 @@ -6122,9 +6185,9 @@ SupperBlkListInit: stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} movw r3, #3858 - ldr r7, .L732 + ldr r7, .L739 mov r2, #6 - ldr r4, .L732+4 + ldr r4, .L739+4 mov r1, #0 mov r6, #0 ldrh r3, [r7, r3] @@ -6132,7 +6195,7 @@ SupperBlkListInit: ldr r0, [r4, #-2024] mul r2, r2, r3 bl ftl_memset - ldr r3, .L732+8 + ldr r3, .L739+8 str r6, [r4, #-2004] str r6, [r4, #-2020] strh r6, [r4, r3] @ movhi @@ -6142,8 +6205,8 @@ SupperBlkListInit: add r3, r3, #900 strh r6, [r4, r3] @ movhi mov r4, r6 - b .L723 -.L725: + b .L730 +.L732: add r2, r7, r2 mov r1, fp add r9, r9, #1 @@ -6157,84 +6220,84 @@ SupperBlkListInit: ldreqh r2, [r7, r3] addeq r5, r5, r2 uxtheq r5, r5 - b .L730 -.L731: + b .L737 +.L738: mov r5, #0 uxth fp, r4 mov r9, r5 movw r3, #3916 -.L730: +.L737: movw r0, #3848 sxth r2, r9 ldrh r1, [r7, r0] cmp r2, r1 - blt .L725 + blt .L732 cmp r5, #0 - ldr r9, .L732+4 - beq .L726 + ldr r9, .L739+4 + beq .L733 sxth r1, r5 mov r0, #32768 bl __aeabi_idiv uxth r5, r0 - b .L727 -.L726: + b .L734 +.L733: sxth r3, r4 ldr r2, [r9, #-2016] mvn r1, #0 mov r3, r3, asl #1 strh r1, [r2, r3] @ movhi -.L727: +.L734: sxth r1, r4 ldr r0, [r9, #-2024] - ldr r3, .L732+4 + ldr r3, .L739+4 mov r2, r1, asl #1 add r1, r2, r1 add r1, r0, r1, asl #1 strh r5, [r1, #4] @ movhi - ldr r1, .L732+12 + ldr r1, .L739+12 ldrh r1, [r9, r1] cmp r8, r1 - beq .L728 - ldr r1, .L732+16 + beq .L735 + ldr r1, .L739+16 ldrh r1, [r3, r1] cmp r8, r1 - beq .L728 - ldr r1, .L732+20 + beq .L735 + ldr r1, .L739+20 ldrh r1, [r3, r1] cmp r8, r1 - beq .L728 + beq .L735 ldr r3, [r3, #-2016] uxth r0, r4 ldrh r3, [r3, r2] cmp r3, #0 - bne .L729 + bne .L736 add r6, r6, #1 uxth r6, r6 bl INSERT_FREE_LIST - b .L728 -.L729: + b .L735 +.L736: add sl, sl, #1 uxth sl, sl bl INSERT_DATA_LIST -.L728: +.L735: add r4, r4, #1 uxth r4, r4 -.L723: +.L730: mov r3, #3856 sxth r8, r4 ldrh r3, [r7, r3] cmp r8, r3 - blt .L731 - ldr r3, .L732+4 + blt .L738 + ldr r3, .L739+4 mov r0, #0 - ldr r2, .L732+8 + ldr r2, .L739+8 strh sl, [r3, r2] @ movhi add r2, r2, #8 strh r6, [r3, r2] @ movhi ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L733: +.L740: .align 2 -.L732: +.L739: .word .LANCHOR0 .word .LANCHOR2 .word -2008 @@ -6253,9 +6316,9 @@ FtlL2PDataInit: stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} .save {r3, r4, r5, r6, r7, r8, sl, lr} mov r1, #0 - ldr r4, .L737 + ldr r4, .L744 movw r6, #3926 - ldr r5, .L737+4 + ldr r5, .L744+4 movw r7, #3954 mov r8, #12 ldr r2, [r4, #3944] @@ -6271,8 +6334,8 @@ FtlL2PDataInit: mov r2, #0 mov ip, r2 mvn r0, #0 - b .L735 -.L736: + b .L742 +.L743: mul r3, r8, r2 ldr r1, [r5, #-1852] add sl, r1, r3 @@ -6288,22 +6351,22 @@ FtlL2PDataInit: bic r1, r1, #3 add r1, sl, r1 str r1, [r3, #8] -.L735: +.L742: ldrh r3, [r4, r7] - ldr r1, .L737 + ldr r1, .L744 cmp r3, r2 - ldr r3, .L737+4 - bhi .L736 - ldr r0, .L737+8 + ldr r3, .L744+4 + bhi .L743 + ldr r0, .L744+8 mvn r2, #0 ldr ip, [r1, #3944] strh r2, [r3, r0] @ movhi - ldr r0, .L737+12 + ldr r0, .L744+12 strh r2, [r3, r0] @ movhi add r0, r0, #10 strh ip, [r3, r0] @ movhi sub r0, r0, #6 - ldr ip, .L737+16 + ldr ip, .L744+16 strh ip, [r3, r0] @ movhi add r0, r0, #40 ldrh ip, [r3, r0] @@ -6311,7 +6374,7 @@ FtlL2PDataInit: strh ip, [r3, r0] @ movhi mov r0, #3952 ldrh r0, [r1, r0] - ldr r1, .L737+20 + ldr r1, .L744+20 strh r0, [r3, r1] @ movhi ldr r1, [r3, #-1040] str r1, [r3, #-1076] @@ -6321,12 +6384,12 @@ FtlL2PDataInit: str r1, [r3, #-1068] ldr r1, [r3, #-1032] str r1, [r3, #-1064] - ldr r1, .L737+24 + ldr r1, .L744+24 strh r2, [r3, r1] @ movhi ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L738: +.L745: .align 2 -.L737: +.L744: .word .LANCHOR0 .word .LANCHOR2 .word -1086 @@ -6355,13 +6418,13 @@ ftl_free_no_use_map_blk: mov r0, r5 bl ftl_memset mov r3, #0 - b .L740 -.L744: + b .L747 +.L751: ldr r0, [r7, r3, asl #2] mov r2, #0 ubfx r0, r0, #10, #16 - b .L741 -.L743: + b .L748 +.L750: mov r1, r2, asl #1 add r2, r2, #1 ldrh ip, [r6, r1] @@ -6370,42 +6433,42 @@ ftl_free_no_use_map_blk: ldreqh ip, [r5, r1] addeq ip, ip, #1 streqh ip, [r5, r1] @ movhi -.L741: +.L748: ldrh r1, [r4, #10] cmp r1, r2 - bhi .L743 + bhi .L750 add r3, r3, #1 uxth r3, r3 -.L740: +.L747: ldrh r2, [r4, #6] cmp r2, r3 - bhi .L744 + bhi .L751 mov sl, #0 ldrh fp, [r5, #0] mov r7, sl - ldr r3, .L750 + ldr r3, .L757 movw r2, #3918 - b .L745 -.L749: + b .L752 +.L756: ldrh r1, [r4, #0] cmp r1, r7 - bne .L746 + bne .L753 ldrh r0, [r4, #2] ldrh r1, [r3, r2] cmp r0, r1 movcc r0, r7, asl #1 strcch r1, [r5, r0] @ movhi -.L746: +.L753: mov r9, r7, asl #1 ldrh r8, [r5, r9] cmp fp, r8 movhi sl, r7 movhi fp, r8 cmp r8, #0 - bne .L748 + bne .L755 ldrh r0, [r6, r9] cmp r0, #0 - beq .L748 + beq .L755 mov r1, #1 stmia sp, {r2, r3} bl FtlFreeSysBlkQueueIn @@ -6414,18 +6477,18 @@ ftl_free_no_use_map_blk: ldrh r1, [r4, #8] sub r1, r1, #1 strh r1, [r4, #8] @ movhi -.L748: +.L755: add r7, r7, #1 uxth r7, r7 -.L745: +.L752: ldrh r1, [r4, #10] cmp r1, r7 - bhi .L749 + bhi .L756 mov r0, sl ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L751: +.L758: .align 2 -.L750: +.L757: .word .LANCHOR0 .fnend .size ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk @@ -6436,8 +6499,8 @@ FtlFreeSysBlkQueueInit: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L753 - movw r2, #4042 + ldr r3, .L760 + movw r2, #4058 stmfd sp!, {r4, lr} .save {r4, lr} mov r4, #0 @@ -6447,16 +6510,16 @@ FtlFreeSysBlkQueueInit: strh r4, [r3, r2] @ movhi add r2, r2, #2 strh r4, [r3, r2] @ movhi - movw r2, #4040 + movw r2, #4056 strh r0, [r3, r2] @ movhi - add r0, r3, #4048 + add r0, r3, #4064 mov r2, #2048 bl ftl_memset mov r0, r4 ldmfd sp!, {r4, pc} -.L754: +.L761: .align 2 -.L753: +.L760: .word .LANCHOR0 .fnend .size FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit @@ -6468,10 +6531,10 @@ FtlBbtMemInit: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L756 + ldr r3, .L763 movw r2, #3980 mvn r1, #0 - ldr r0, .L756+4 + ldr r0, .L763+4 strh r1, [r3, r2] @ movhi add r2, r2, #6 mov r1, #0 @@ -6479,9 +6542,9 @@ FtlBbtMemInit: mov r1, #255 mov r2, #16 b ftl_memset -.L757: +.L764: .align 2 -.L756: +.L763: .word .LANCHOR0 .word .LANCHOR0+3992 .fnend @@ -6493,8 +6556,8 @@ FtlBbt2Bitmap: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L762 - ldr r2, .L762+4 + ldr r3, .L769 + ldr r2, .L769+4 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} mov r5, r0 @@ -6507,7 +6570,7 @@ FtlBbt2Bitmap: mov r3, #0 movw ip, #65535 mov r0, #1 -.L760: +.L767: ldrh r2, [r5, r3] cmp r2, ip ldmeqfd sp!, {r4, r5, r6, pc} @@ -6518,11 +6581,11 @@ FtlBbt2Bitmap: ldr r6, [r4, r1, asl #2] orr r2, r6, r0, asl r2 str r2, [r4, r1, asl #2] - bne .L760 + bne .L767 ldmfd sp!, {r4, r5, r6, pc} -.L763: +.L770: .align 2 -.L762: +.L769: .word -1028 .word .LANCHOR2 .fnend @@ -6537,50 +6600,50 @@ FtlVariablesInit: stmfd sp!, {r3, r4, r5, r6, r7, lr} .save {r3, r4, r5, r6, r7, lr} mvn r3, #0 - ldr r5, .L765 + ldr r6, .L772 mov r4, #0 - ldr r2, .L765+4 + ldr r2, .L772+4 mov r1, r4 - ldr r6, .L765+8 + ldr r5, .L772+8 movw r7, #3858 - str r3, [r5, #-1008] - strh r3, [r5, r2] @ movhi + str r3, [r6, #-1008] + strh r3, [r6, r2] @ movhi movw r3, #3962 - strh r4, [r6, r3] @ movhi + strh r4, [r5, r3] @ movhi mov r3, #3936 - ldrh r2, [r6, r3] - ldr r0, [r6, #3964] - str r4, [r5, #-1024] + ldrh r2, [r5, r3] + ldr r0, [r5, #3964] + str r4, [r6, #-1024] mov r2, r2, asl #1 - str r4, [r5, #-1016] - str r4, [r5, #-1012] - str r4, [r6, #3840] + str r4, [r6, #-1016] + str r4, [r6, #-1012] + str r4, [r5, #3840] bl ftl_memset - ldrh r2, [r6, r7] + ldrh r2, [r5, r7] mov r1, r4 - ldr r0, [r5, #-2080] + ldr r0, [r5, #4048] mov r2, r2, asl #1 bl ftl_memset - ldrh r2, [r6, r7] + ldrh r2, [r5, r7] mov r1, r4 - ldr r0, [r5, #-1004] + ldr r0, [r6, #-1004] mov r2, r2, asl #1 bl ftl_memset mov r1, r4 mov r2, #48 - ldr r0, .L765+12 + ldr r0, .L772+12 bl ftl_memset mov r1, r4 mov r2, #512 - ldr r0, .L765+16 + ldr r0, .L772+16 bl ftl_memset bl FtlGcBufInit bl FtlL2PDataInit mov r0, r4 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L766: +.L773: .align 2 -.L765: +.L772: .word .LANCHOR2 .word -1020 .word .LANCHOR0 @@ -6598,13 +6661,13 @@ FtlMemInit: stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} .save {r4, r5, r6, r7, r8, r9, sl, lr} mov r6, #0 - ldr r4, .L798 + ldr r4, .L805 mov r0, #1024 - ldr r3, .L798+4 + ldr r3, .L805+4 mov r7, #12 - ldr r2, .L798+8 + ldr r2, .L805+8 movw sl, #3848 - ldr r5, .L798+12 + ldr r5, .L805+12 mov r8, #36 strh r6, [r4, r3] @ movhi movw r3, #65535 @@ -6615,7 +6678,7 @@ FtlMemInit: str r6, [r4, #-1000] strh r3, [r4, r2] @ movhi mov r2, #32 - ldr r3, .L798+16 + ldr r3, .L805+16 str r6, [r4, #-1712] str r6, [r4, #-1804] strh r2, [r4, r3] @ movhi @@ -6641,7 +6704,7 @@ FtlMemInit: str r6, [r4, #-1836] str r6, [r4, #-1796] str r6, [r4, #-1792] - str r6, [r4, #-2076] + str r6, [r5, #4052] str r6, [r4, #-1784] str r6, [r4, #-1780] str r6, [r4, #-996] @@ -6659,7 +6722,7 @@ FtlMemInit: str r0, [r4, #-976] ldrh r0, [r5, r6] strhi r3, [r4, #-976] - ldr r4, .L798 + ldr r4, .L805 mov r0, r0, asl #1 bl ftl_malloc str r0, [r4, #-1152] @@ -6681,7 +6744,7 @@ FtlMemInit: str r0, [r4, #-964] mov r0, r6 bl ftl_malloc - str r0, [r4, #-2084] + str r0, [r5, #4044] mov r0, r6 bl ftl_malloc str r0, [r4, #-1164] @@ -6732,7 +6795,7 @@ FtlMemInit: mov r0, sl, asl #3 bl ftl_malloc ldrh r3, [r5, r6] - ldr sl, .L798+20 + ldr sl, .L805+20 str r0, [r4, #-932] ldr r0, [r4, #-1160] mul r0, r0, r3 @@ -6761,7 +6824,7 @@ FtlMemInit: mov sl, sl, asl #1 str r0, [r4, #-920] add r0, r0, #32 - str r0, [r4, #-2080] + str r0, [r5, #4048] mov r0, sl bl ftl_malloc str r0, [r4, #-916] @@ -6827,7 +6890,7 @@ FtlMemInit: mul r0, r0, r3 bl ftl_malloc ldrh r3, [r5, r6] - ldr r6, .L798+24 + ldr r6, .L805+24 str r0, [r4, #-1092] mov r0, #6 mul r0, r0, r3 @@ -6844,166 +6907,167 @@ FtlMemInit: bl ftl_malloc ldrh r1, [r4, r6] mov r3, #1 - ldr ip, .L798+12 + ldr ip, .L805+12 mov r1, r1, asl #2 mov r2, r1 str r0, [r5, #4008] ldrh r5, [r5, r7] - ldr r0, .L798+28 - b .L769 -.L770: + ldr r0, .L805+28 + b .L776 +.L777: ldr r4, [ip, #4008] add r3, r3, #1 add r4, r4, r2 add r2, r2, r1 str r4, [r0, #4]! -.L769: +.L776: cmp r3, r5 - bcc .L770 - ldr r0, .L798+32 + bcc .L777 + ldr r0, .L805+32 mov r2, #0 mov r1, r2 add r0, r0, r3, asl #2 - b .L771 -.L772: + b .L778 +.L779: add ip, r0, r2 add r3, r3, #1 add r2, r2, #4 str r1, [ip, #28] -.L771: +.L778: cmp r3, #7 - bls .L772 - ldr r3, .L798 + bls .L779 + ldr r3, .L805 ldr r2, [r3, #-1040] cmp r2, #0 - beq .L797 -.L773: + beq .L804 +.L780: ldr r2, [r3, #-1096] cmp r2, #0 - beq .L797 -.L775: + beq .L804 +.L782: ldr r2, [r3, #-1032] cmp r2, #0 - beq .L797 -.L776: + beq .L804 +.L783: ldr r2, [r3, #-1036] cmp r2, #0 - beq .L797 -.L777: + beq .L804 +.L784: ldr r2, [r3, #-1852] cmp r2, #0 - beq .L797 -.L778: + beq .L804 +.L785: ldr r2, [r3, #-1092] cmp r2, #0 - beq .L797 -.L779: + beq .L804 +.L786: ldr r2, [r3, #-2024] cmp r2, #0 - beq .L797 -.L780: - ldr r2, .L798+12 + beq .L804 +.L787: + ldr r2, .L805+12 ldr r2, [r2, #4008] cmp r2, #0 - beq .L797 -.L781: + beq .L804 +.L788: ldr r3, [r3, #-2016] cmp r3, #0 - beq .L797 -.L782: - ldr r3, .L798 + beq .L804 +.L789: + ldr r3, .L805 ldr r2, [r3, #-1152] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-1148] cmp r2, #0 - beq .L797 -.L784: + beq .L804 +.L791: ldr r2, [r3, #-972] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-964] cmp r2, #0 - beq .L797 - ldr r2, [r3, #-2084] + beq .L804 + ldr r2, .L805+12 + ldr r2, [r2, #4044] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-1164] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-968] cmp r2, #0 - beq .L797 -.L786: + beq .L804 +.L793: ldr r2, [r3, #-960] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-956] cmp r2, #0 - beq .L797 + beq .L804 ldr r3, [r3, #-952] cmp r3, #0 - beq .L797 - ldr r3, .L798 + beq .L804 + ldr r3, .L805 ldr r2, [r3, #-1172] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-944] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-940] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-1176] cmp r2, #0 - beq .L797 -.L788: + beq .L804 +.L795: ldr r2, [r3, #-936] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-932] cmp r2, #0 - beq .L797 + beq .L804 ldr r2, [r3, #-1168] cmp r2, #0 - beq .L797 -.L790: - ldr r2, [r3, #-2080] - cmp r2, #0 - beq .L797 + beq .L804 +.L797: + ldr r2, .L805+12 + ldr r1, [r2, #4048] + cmp r1, #0 + beq .L804 ldr r3, [r3, #-1004] cmp r3, #0 - beq .L797 -.L792: - ldr r3, .L798+12 - ldr r3, [r3, #3964] + beq .L804 +.L799: + ldr r3, [r2, #3964] cmp r3, #0 - beq .L797 -.L793: - ldr r3, .L798 + beq .L804 +.L800: + ldr r3, .L805 ldr r2, [r3, #-912] cmp r2, #0 - beq .L797 -.L794: + beq .L804 +.L801: ldr r2, [r3, #-908] cmp r2, #0 - beq .L797 -.L795: + beq .L804 +.L802: ldr r3, [r3, #-904] cmp r3, #0 - bne .L796 -.L797: - ldr r0, .L798+36 - ldr r1, .L798+40 + bne .L803 +.L804: + ldr r0, .L805+36 + ldr r1, .L805+40 bl printk mvn r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L796: +.L803: mov r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L799: +.L806: .align 2 -.L798: +.L805: .word .LANCHOR2 .word -1100 .word -1142 @@ -7030,7 +7094,7 @@ ftl_read_flash_info: mov r2, #11 mov r4, r0 bl ftl_memset - ldr r3, .L803 + ldr r3, .L810 ldr r2, [r3, #3624] ldr r1, [r3, #856] ldrb r2, [r2, #9] @ zero_extendqisi2 @@ -7061,22 +7125,22 @@ ftl_read_flash_info: strb r1, [r4, #10] strb r2, [r4, #9] mov r2, #1 - ldr r1, .L803+4 - b .L801 -.L802: + ldr r1, .L810+4 + b .L808 +.L809: ldrb r5, [r3, r1] @ zero_extendqisi2 add r3, r3, #1 ldrb ip, [r4, #10] @ zero_extendqisi2 orr ip, ip, r2, asl r5 strb ip, [r4, #10] -.L801: +.L808: uxtb ip, r3 cmp ip, r0 - bcc .L802 + bcc .L809 ldmfd sp!, {r3, r4, r5, pc} -.L804: +.L811: .align 2 -.L803: +.L810: .word .LANCHOR0 .word .LANCHOR0+3764 .fnend @@ -7088,50 +7152,50 @@ FlashDieInfoInit: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r1, .L817 + ldr r1, .L824 mov r2, #0 stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} .save {r3, r4, r5, r6, r7, r8, sl, lr} - ldr r3, .L817+4 + ldr r3, .L824+4 strb r2, [r1, #-896] - ldr r1, .L817+8 + ldr r1, .L824+8 strb r2, [r3, #3762] movw r2, #2902 ldrh r2, [r1, r2] cmp r2, #256 str r2, [r3, #856] movhi r2, #512 - bhi .L816 + bhi .L823 cmp r2, #128 - bls .L807 + bls .L814 mov r2, #256 -.L816: +.L823: str r2, [r3, #856] -.L807: +.L814: mov r1, #0 mov r2, #8 - ldr r0, .L817+12 + ldr r0, .L824+12 mov r6, #0 bl ftl_memset mov r1, #0 mov r2, #32 - ldr r0, .L817+16 + ldr r0, .L824+16 bl ftl_memset - ldr r0, .L817+20 + ldr r0, .L824+20 mov r1, #0 mov r2, #128 bl ftl_memset - ldr r7, .L817+24 - ldr r5, .L817+4 + ldr r7, .L824+24 + ldr r5, .L824+4 mov r8, r7 -.L809: +.L816: ldr r4, [r5, #3624] mov r1, r8 add r0, r4, #1 ldrb r2, [r4, #0] @ zero_extendqisi2 bl FlashMemCmp8 cmp r0, #0 - bne .L808 + bne .L815 ldrb r3, [r5, #3762] @ zero_extendqisi2 add r2, r5, r3, asl #2 str r0, [r2, #3588] @@ -7139,28 +7203,28 @@ FlashDieInfoInit: add r3, r3, #1 strb r3, [r5, #3762] strb r6, [r2, #3764] -.L808: +.L815: add r6, r6, #1 add r8, r8, #8 cmp r6, #4 - bne .L809 - ldr r5, .L817+4 - ldr r3, .L817 + bne .L816 + ldr r5, .L824+4 + ldr r3, .L824 ldrb r2, [r5, #3762] @ zero_extendqisi2 strb r2, [r3, #-896] ldrb r3, [r4, #8] @ zero_extendqisi2 cmp r3, #2 - bne .L810 + bne .L817 add sl, r4, #1 mov r6, #0 mov r8, r5 -.L813: +.L820: mov r0, sl mov r1, r7 ldrb r2, [r4, #0] @ zero_extendqisi2 bl FlashMemCmp8 cmp r0, #0 - bne .L811 + bne .L818 ldrb r1, [r4, #13] @ zero_extendqisi2 ldr r0, [r5, #856] ldrb r3, [r5, #3762] @ zero_extendqisi2 @@ -7178,25 +7242,25 @@ FlashDieInfoInit: add r3, r3, #1 strb r3, [r8, #3762] strb r6, [r2, #3764] -.L811: +.L818: add r6, r6, #1 add r7, r7, #8 cmp r6, #4 - bne .L813 -.L810: - ldr r3, .L817+4 + bne .L820 +.L817: + ldr r3, .L824+4 ldrb r1, [r4, #13] @ zero_extendqisi2 - ldr r2, .L817 + ldr r2, .L824 ldrb r3, [r3, #3762] @ zero_extendqisi2 mul r1, r1, r3 ldrh r3, [r4, #14] mul r1, r3, r1 - ldr r3, .L817+28 + ldr r3, .L824+28 strh r1, [r2, r3] @ movhi ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L818: +.L825: .align 2 -.L817: +.L824: .word .LANCHOR2 .word .LANCHOR0 .word .LANCHOR1 @@ -7218,85 +7282,85 @@ BuildFlashLsbPageTable: stmfd sp!, {r4, lr} .save {r4, lr} mov r4, r1 - bne .L820 - ldr r3, .L859 -.L821: + bne .L827 + ldr r3, .L866 +.L828: strh r0, [r3, #2]! @ movhi add r0, r0, #1 uxth r0, r0 cmp r0, #256 - bne .L821 - b .L822 -.L820: + bne .L828 + b .L829 +.L827: cmp r0, #1 - bne .L823 - ldr r0, .L859+4 + bne .L830 + ldr r0, .L866+4 mov r2, #0 mov r3, r2 -.L826: +.L833: uxth r1, r3 cmp r1, #3 - bls .L824 + bls .L831 tst r3, #1 moveq r1, #2 movne r1, #3 rsb r1, r1, r2 uxth r1, r1 -.L824: +.L831: add r3, r3, #1 strh r1, [r2, r0] @ movhi cmp r3, #256 add r2, r2, #2 - bne .L826 - b .L822 -.L823: + bne .L833 + b .L829 +.L830: cmp r0, #2 - bne .L827 + bne .L834 mov r3, #0 - ldr r0, .L859 + ldr r0, .L866 movw r2, #65535 mov r1, r3 - b .L858 -.L830: + b .L865 +.L837: cmp r3, #1 movls r1, r3 movhi r1, r2 -.L858: +.L865: add r3, r3, #1 add r2, r2, #2 strh r1, [r0, #2]! @ movhi uxth r3, r3 uxth r2, r2 cmp r3, #256 - bne .L830 - b .L822 -.L827: + bne .L837 + b .L829 +.L834: cmp r0, #3 - bne .L831 - ldr r0, .L859+4 + bne .L838 + ldr r0, .L866+4 mov r2, #0 mov r3, r2 -.L834: +.L841: uxth r1, r3 cmp r1, #5 - bls .L832 + bls .L839 tst r3, #1 moveq r1, #4 movne r1, #5 rsb r1, r1, r2 uxth r1, r1 -.L832: +.L839: add r3, r3, #1 strh r1, [r2, r0] @ movhi cmp r3, #256 add r2, r2, #2 - bne .L834 - b .L822 -.L831: + bne .L841 + b .L829 +.L838: cmp r0, #4 mov r2, #0 - bne .L835 - ldr r3, .L859+8 + bne .L842 + ldr r3, .L866+8 movw r1, #3076 strh r2, [r3, r1] @ movhi movw r2, #3078 @@ -7312,7 +7376,7 @@ BuildFlashLsbPageTable: mov r1, #5 strh r0, [r3, r2] @ movhi add r2, r2, #2 - ldr r0, .L859+12 + ldr r0, .L866+12 strh r1, [r3, r2] @ movhi mov r2, #3088 mov r1, #7 @@ -7322,7 +7386,7 @@ BuildFlashLsbPageTable: strh r1, [r3, r2] @ movhi mov r2, #16 mov r3, r1 -.L837: +.L844: tst r3, #1 add r3, r3, #1 moveq r1, #6 @@ -7332,72 +7396,72 @@ BuildFlashLsbPageTable: add r2, r2, #2 strh r1, [r0, #2]! @ movhi uxth r2, r2 - bne .L837 - b .L822 -.L835: + bne .L844 + b .L829 +.L842: cmp r0, #5 - bne .L838 - ldr r1, .L859 + bne .L845 + ldr r1, .L866 mov r3, r2 -.L839: +.L846: strh r3, [r1, #2]! @ movhi add r3, r3, #1 uxth r3, r3 cmp r3, #16 - bne .L839 - ldr r2, .L859+16 -.L840: + bne .L846 + ldr r2, .L866+16 +.L847: strh r3, [r2, #2]! @ movhi add r3, r3, #2 uxth r3, r3 cmp r3, #496 - bne .L840 - b .L822 -.L838: + bne .L847 + b .L829 +.L845: cmp r0, #6 - bne .L822 - ldr r0, .L859 + bne .L829 + ldr r0, .L866 mov r3, r2 -.L843: +.L850: uxth r1, r3 cmp r1, #5 - bls .L841 + bls .L848 tst r3, #1 moveq r1, #10 movne r1, #12 rsb r1, r1, r2 uxth r1, r1 -.L841: +.L848: add r3, r3, #1 add r2, r2, #3 cmp r3, #256 strh r1, [r0, #2]! @ movhi uxth r2, r2 - bne .L843 -.L822: + bne .L850 +.L829: mov r2, #1024 - ldr r0, .L859+20 + ldr r0, .L866+20 mov r1, #255 uxth r4, r4 bl ftl_memset - ldr r2, .L859 + ldr r2, .L866 mov r3, #0 - ldr r0, .L859+24 - b .L844 -.L845: + ldr r0, .L866+24 + b .L851 +.L852: ldrh r1, [r2, #2]! add r3, r3, #1 uxth r3, r3 add ip, r0, r1, asl #1 sub ip, ip, #892 strh r1, [ip, #0] @ movhi -.L844: +.L851: cmp r3, r4 - bcc .L845 + bcc .L852 ldmfd sp!, {r4, pc} -.L860: +.L867: .align 2 -.L859: +.L866: .word .LANCHOR0+3074 .word .LANCHOR0+3076 .word .LANCHOR0 @@ -7429,15 +7493,15 @@ ftl_memcpy32: stmfd sp!, {r4, lr} .save {r4, lr} mov ip, r3 - b .L863 -.L864: + b .L870 +.L871: ldr r4, [r1, r3] add ip, ip, #1 str r4, [r0, r3] add r3, r3, #4 -.L863: +.L870: cmp ip, r2 - bne .L864 + bne .L871 ldmfd sp!, {r4, pc} .fnend .size ftl_memcpy32, .-ftl_memcpy32 @@ -7463,22 +7527,22 @@ js_hash: mov r2, #0 stmfd sp!, {r4, lr} .save {r4, lr} - ldr r0, .L869 - b .L867 -.L868: + ldr r0, .L876 + b .L874 +.L875: mov ip, r0, asl #5 ldrb r4, [r3, r2] @ zero_extendqisi2 add ip, ip, r0, lsr #2 add r2, r2, #1 add ip, ip, r4 eor r0, r0, ip -.L867: +.L874: cmp r2, r1 - bne .L868 + bne .L875 ldmfd sp!, {r4, pc} -.L870: +.L877: .align 2 -.L869: +.L876: .word 1204201446 .fnend .size js_hash, .-js_hash @@ -7490,12 +7554,12 @@ timer_get_time: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L872 + ldr r3, .L879 ldr r0, [r3, #0] b jiffies_to_msecs -.L873: +.L880: .align 2 -.L872: +.L879: .word jiffies .fnend .size timer_get_time, .-timer_get_time @@ -7509,7 +7573,7 @@ FlashSramLoadStore: stmfd sp!, {r4, lr} .save {r4, lr} cmp r2, #0 - ldr r4, .L877 + ldr r4, .L884 mov ip, r0 mov r2, r3 ldr r4, [r4, #132] @@ -7519,9 +7583,9 @@ FlashSramLoadStore: movne r1, ip ldmfd sp!, {r4, lr} b memcpy -.L878: +.L885: .align 2 -.L877: +.L884: .word .LANCHOR2 .fnend .size FlashSramLoadStore, .-FlashSramLoadStore @@ -7566,12 +7630,12 @@ rk_ftl_get_capacity: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L883 + ldr r3, .L890 ldr r0, [r3, #3956] bx lr -.L884: +.L891: .align 2 -.L883: +.L890: .word .LANCHOR0 .fnend .size rk_ftl_get_capacity, .-rk_ftl_get_capacity @@ -7624,47 +7688,47 @@ rknand_print_hex: mov r7, r2 mov sl, r3 mov r4, r5 - b .L889 -.L895: + b .L896 +.L902: cmp r5, #0 - bne .L890 - ldr r0, .L897 + bne .L897 + ldr r0, .L904 mov r1, r8 mov r2, r6 mov r3, r4 bl printk -.L890: +.L897: cmp r7, #4 - ldreq r0, .L897+4 + ldreq r0, .L904+4 ldreq r1, [r6, r4, asl #2] - beq .L896 + beq .L903 cmp r7, #2 moveq r3, r4, asl #1 - ldreq r0, .L897+4 + ldreq r0, .L904+4 ldreqsh r1, [r6, r3] - ldrne r0, .L897+4 + ldrne r0, .L904+4 ldrneb r1, [r6, r4] @ zero_extendqisi2 -.L896: +.L903: add r5, r5, #1 bl printk cmp r5, #15 - bls .L894 - ldr r0, .L897+8 + bls .L901 + ldr r0, .L904+8 mov r5, #0 - ldr r1, .L897+12 + ldr r1, .L904+12 bl printk -.L894: +.L901: add r4, r4, #1 -.L889: +.L896: cmp r4, sl - bne .L895 - ldr r0, .L897+8 - ldr r1, .L897+12 + bne .L902 + ldr r0, .L904+8 + ldr r1, .L904+12 ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} b printk -.L898: +.L905: .align 2 -.L897: +.L904: .word .LC84 .word .LC85 .word .LC78 @@ -7680,15 +7744,15 @@ NandcXferComp: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r0, r1, r4, r5, r6, lr} .save {r0, r1, r4, r5, r6, lr} - ldr r6, .L922 + ldr r6, .L929 add r0, r6, r0, asl #3 ldr r3, [r6, #3788] ldr r4, [r0, #864] cmp r3, #3 - bls .L916 + bls .L923 ldr r3, [r4, #16] tst r3, #4 - beq .L916 + beq .L923 mov r0, r4 bl wait_for_nandc_xfer_completed ldr r5, [r4, #16] @@ -7696,49 +7760,49 @@ NandcXferComp: ands r5, r5, #2 str r3, [sp, #0] movne r5, #0 - bne .L920 - b .L921 -.L906: + bne .L927 + b .L928 +.L913: ldr r3, [r6, #3788] cmp r3, #5 - bls .L903 + bls .L910 ldr r3, [r4, #0] str r3, [sp, #4] ldr r3, [sp, #4] tst r3, #8192 - beq .L903 + beq .L910 ldr r3, [sp, #4] tst r3, #131072 - bne .L904 -.L903: + bne .L911 +.L910: add r5, r5, #1 bic r3, r5, #-16777216 cmp r3, #0 - bne .L920 + bne .L927 ldr r2, [r4, #28] mov r1, r5 ldr r3, [sp, #0] ubfx r2, r2, #16, #5 - ldr r0, .L922+4 + ldr r0, .L929+4 ubfx r3, r3, #22, #6 bl printk - ldr r0, .L922+8 + ldr r0, .L929+8 mov r1, r4 mov r2, #4 mov r3, #512 bl rknand_print_hex -.L920: +.L927: ldr r2, [r4, #28] ldr r3, [sp, #0] ubfx r2, r2, #16, #5 ubfx r3, r3, #22, #6 cmp r2, r3 - blt .L906 -.L904: - ldr r4, .L922 + blt .L913 +.L911: + ldr r4, .L929 ldr r3, [r4, #3820] cmp r3, #0 - beq .L907 + beq .L914 ldr r1, [sp, #0] mov r2, #0 ldr r0, [r4, #3812] @@ -7751,40 +7815,40 @@ NandcXferComp: ubfx r1, r1, #22, #5 mov r1, r1, asl #7 bl rknand_dma_unmap_single - b .L907 -.L910: + b .L914 +.L917: ldr r3, [r4, #8] add r5, r5, #1 str r3, [sp, #0] bic r3, r5, #-16777216 cmp r3, #0 - bne .L921 + bne .L928 ldr r2, [sp, #0] mov r1, r5 ldr r3, [r4, #28] - ldr r0, .L922+12 + ldr r0, .L929+12 ubfx r3, r3, #16, #5 bl printk - ldr r0, .L922+8 + ldr r0, .L929+8 mov r1, r4 mov r2, #4 mov r3, #512 bl rknand_print_hex -.L921: +.L928: ldr r3, [sp, #0] tst r3, #1048576 - beq .L910 - ldr r6, .L922 + beq .L917 + ldr r6, .L929 ldr r3, [r6, #3828] cmp r3, #0 - beq .L911 + beq .L918 mov r0, r4 bl NandcSendDumpDataStart -.L911: +.L918: ldr r3, [r6, #3820] - ldr r5, .L922 + ldr r5, .L929 cmp r3, #0 - beq .L912 + beq .L919 ldr r1, [sp, #0] mov r2, #1 ldr r0, [r5, #3812] @@ -7797,29 +7861,29 @@ NandcXferComp: ubfx r1, r1, #22, #5 mov r1, r1, asl #7 bl rknand_dma_unmap_single -.L912: - ldr r3, .L922 +.L919: + ldr r3, .L929 ldr r3, [r3, #3828] cmp r3, #0 - beq .L907 + beq .L914 mov r0, r4 bl NandcSendDumpDataDone -.L907: - ldr r3, .L922 +.L914: + ldr r3, .L929 mov r2, #0 str r2, [r3, #3820] - b .L899 -.L916: + b .L906 +.L923: ldr r3, [r4, #8] str r3, [sp, #0] ldr r3, [sp, #0] tst r3, #1048576 - beq .L916 -.L899: + beq .L923 +.L906: ldmfd sp!, {r2, r3, r4, r5, r6, pc} -.L923: +.L930: .align 2 -.L922: +.L929: .word .LANCHOR0 .word .LC87 .word .LC88 @@ -7837,7 +7901,7 @@ NandcXferData: .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r4, r3 mov r9, r3 - ldr r3, .L962 + ldr r3, .L969 .pad #92 sub sp, sp, #92 tst r4, #63 @@ -7847,15 +7911,15 @@ NandcXferData: mov sl, r2 ldr r5, [sp, #128] ldr r6, [r3, #864] - bne .L925 + bne .L932 cmp r5, #0 - bne .L926 + bne .L933 add r0, sp, #24 mov r1, #255 mov r2, #64 add r5, sp, #24 bl ftl_memset -.L926: +.L933: mov r0, r7 mov r1, fp mov r2, sl @@ -7866,8 +7930,8 @@ NandcXferData: bl NandcXferComp cmp fp, #0 movne r4, #0 - bne .L927 - ldr r1, .L962 + bne .L934 + ldr r1, .L969 mov r0, sl, lsr #1 mov r3, fp mov r2, fp @@ -7876,8 +7940,8 @@ NandcXferData: cmp ip, #24 movhi ip, #128 movls ip, #64 - b .L929 -.L930: + b .L936 +.L937: ldr r1, [r4, #3800] mov r3, r3, lsr #2 add r2, r2, #1 @@ -7891,29 +7955,29 @@ NandcXferData: strb r3, [r5, #3] add r5, r5, #4 mov r3, r7 -.L929: +.L936: cmp r2, r0 add r7, r3, ip - ldr r1, .L962 - bcc .L930 + ldr r1, .L969 + bcc .L937 mov r3, #0 ldr r0, [r1, #3832] mov sl, sl, lsr #2 ldr r1, [r1, #3788] mov r4, r3 - b .L931 -.L937: + b .L938 +.L944: add r2, r3, #8 ldr r2, [r6, r2, asl #2] str r2, [sp, #20] ldr r2, [sp, #20] tst r2, #4 - bne .L952 + bne .L959 ldr r2, [sp, #20] ands r2, r2, #32768 - bne .L952 + bne .L959 cmp r1, #5 - bls .L933 + bls .L940 ldr r7, [sp, #20] ldr ip, [sp, #20] ldr r5, [sp, #20] @@ -7932,10 +7996,10 @@ NandcXferData: ubfxls ip, ip, #16, #5 ubfxhi r2, r2, #27, #1 ubfxls r2, r2, #29, #1 - b .L960 -.L933: + b .L967 +.L940: cmp r1, #3 - bls .L935 + bls .L942 ldr r7, [sp, #20] ldr ip, [sp, #20] ldr r5, [sp, #20] @@ -7954,31 +8018,31 @@ NandcXferData: ubfxls ip, ip, #16, #5 ubfxhi r2, r2, #28, #1 ubfxls r2, r2, #30, #1 -.L960: +.L967: orr r2, ip, r2, asl #5 -.L935: +.L942: cmp r4, r2 movcc r4, r2 - b .L932 -.L952: + b .L939 +.L959: mvn r4, #0 -.L932: +.L939: add r3, r3, #1 -.L931: +.L938: cmp r3, sl - bcs .L927 + bcs .L934 cmp r0, #0 - bne .L937 -.L927: + bne .L944 +.L934: mov r3, #0 str r3, [r6, #16] - b .L938 -.L925: + b .L945 +.L932: cmp r1, #1 mov r8, #0 - bne .L958 - b .L939 -.L942: + bne .L965 + b .L946 +.L949: cmp r5, #0 and r4, r8, #3 mov r0, r6 @@ -8002,12 +8066,12 @@ NandcXferData: mov r0, r7 bl NandcXferComp add r9, r9, #1024 -.L939: +.L946: cmp r8, sl - bcc .L942 + bcc .L949 mov r4, #0 - b .L938 -.L958: + b .L945 +.L965: mov r1, r8 mov r2, #2 mov r3, r8 @@ -8019,15 +8083,15 @@ NandcXferData: mov ip, r8 mov fp, r6 mov r6, r5 - b .L961 -.L947: + b .L968 +.L954: mov r0, r7 bl NandcXferComp ldr r3, [fp, #32] add ip, r5, #2 cmp ip, sl str r3, [sp, #20] - bcs .L944 + bcs .L951 mov r3, #0 mov r0, r7 str r3, [sp, #0] @@ -8038,11 +8102,11 @@ NandcXferData: str ip, [sp, #8] bl NandcXferStart ldr ip, [sp, #8] -.L944: +.L951: ldr r3, [sp, #20] tst r3, #4 mvnne r4, #0 - bne .L945 + bne .L952 ldr r2, [sp, #20] ldr r3, [sp, #20] ubfx r2, r2, #3, #5 @@ -8050,7 +8114,7 @@ NandcXferData: orr r3, r2, r3, asl #5 cmp r4, r3 movcc r4, r3 -.L945: +.L952: cmp r6, #0 and r2, r8, #3 mov r0, fp @@ -8065,34 +8129,34 @@ NandcXferData: str r5, [sp, #0] bl NandcCopy1KB ldr ip, [sp, #8] -.L961: +.L968: cmp ip, sl mov r5, ip - bcc .L947 + bcc .L954 mov r6, fp ldr fp, [sp, #12] -.L938: - ldr r3, .L962 +.L945: + ldr r3, .L969 rsbs fp, fp, #1 movcc fp, #0 ldr r3, [r3, #3788] cmp r3, #5 movls fp, #0 cmp fp, #0 - beq .L948 + beq .L955 ldr r3, [r6, #0] and r2, r3, #139264 cmp r2, #139264 orreq r3, r3, #131072 streq r3, [r6, #0] mvneq r4, #0 -.L948: +.L955: mov r0, r4 add sp, sp, #92 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L963: +.L970: .align 2 -.L962: +.L969: .word .LANCHOR0 .fnend .size NandcXferData, .-NandcXferData @@ -8106,23 +8170,23 @@ FlashProgPage: stmfd sp!, {r0, r1, r4, r5, r6, r7, r8, lr} .save {r0, r1, r4, r5, r6, r7, r8, lr} mov r8, r3 - ldr r3, .L967 + ldr r3, .L974 subs r4, r0, #0 mov r5, r1 mov r6, r2 ldrb r7, [r3, #2901] @ zero_extendqisi2 - bne .L965 - ldr r3, .L967+4 + bne .L972 + ldr r3, .L974+4 ldrb r2, [r3, #853] @ zero_extendqisi2 ldr r1, [r3, #856] mul r2, r1, r2 cmp r5, r2 - bcs .L965 + bcs .L972 ldrb r3, [r3, #852] @ zero_extendqisi2 cmp r3, #0 subeq r7, r7, #2 movne r7, #4 -.L965: +.L972: mov r0, r4 bl NandcWaitFlashReady mov r0, r4 @@ -8149,9 +8213,9 @@ FlashProgPage: bl NandcFlashDeCs and r0, r5, #1 ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, pc} -.L968: +.L975: .align 2 -.L967: +.L974: .word .LANCHOR1 .word .LANCHOR0 .fnend @@ -8166,29 +8230,29 @@ FlashPageProgMsbFFData: stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} .save {r3, r4, r5, r6, r7, r8, sl, lr} mov r4, r2 - ldr r2, .L976 + ldr r2, .L983 mov r7, r1 mov r8, r0 ldrb r1, [r2, #928] @ zero_extendqisi2 ldr r3, [r2, #3624] cmp r1, #0 ldrb r3, [r3, #19] @ zero_extendqisi2 - beq .L970 + beq .L977 ldr r1, [r2, #3776] - ldr r2, .L976+4 + ldr r2, .L983+4 cmp r1, r2 ldmeqfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L970: +.L977: sub r2, r3, #5 uxtb r2, r2 cmp r3, #68 cmpne r2, #2 - bls .L973 + bls .L980 cmp r3, #35 cmpne r3, #19 - beq .L973 + beq .L980 ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L974: +.L981: add r3, r5, r4, asl #1 sub r3, r3, #892 ldrh r3, [r3, #0] @@ -8205,20 +8269,20 @@ FlashPageProgMsbFFData: mov r3, #0 bl FlashProgPage uxth r4, r4 - b .L975 -.L973: - ldr r6, .L976 + b .L982 +.L980: + ldr r6, .L983 movw sl, #65535 - ldr r5, .L976+8 -.L975: + ldr r5, .L983+8 +.L982: ldr r3, [r6, #3624] ldrh r3, [r3, #10] cmp r3, r4 - bhi .L974 + bhi .L981 ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L977: +.L984: .align 2 -.L976: +.L983: .word .LANCHOR0 .word 1446522928 .word .LANCHOR2 @@ -8234,19 +8298,19 @@ FlashReadRawPage: stmfd sp!, {r0, r1, r4, r5, r6, r7, r8, lr} .save {r0, r1, r4, r5, r6, r7, r8, lr} mov r8, r3 - ldr r3, .L981 + ldr r3, .L988 subs r4, r0, #0 mov r6, r1 mov r5, r2 ldrb r7, [r3, #2901] @ zero_extendqisi2 - bne .L979 - ldr r3, .L981+4 + bne .L986 + ldr r3, .L988+4 ldrb r2, [r3, #853] @ zero_extendqisi2 ldr r3, [r3, #856] mul r3, r3, r2 cmp r1, r3 movcc r7, #4 -.L979: +.L986: mov r0, r4 bl NandcWaitFlashReady mov r0, r4 @@ -8267,9 +8331,9 @@ FlashReadRawPage: bl NandcFlashDeCs mov r0, r5 ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, pc} -.L982: +.L989: .align 2 -.L981: +.L988: .word .LANCHOR1 .word .LANCHOR0 .fnend @@ -8284,9 +8348,9 @@ HynixReadRetrial: stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r7, r3 - ldr r3, .L997 + ldr r3, .L1004 mov sl, r2 - ldr fp, .L997 + ldr fp, .L1004 mov r6, r0 add r2, r3, r0 str r1, [sp, #4] @@ -8300,12 +8364,12 @@ HynixReadRetrial: ldreqb r4, [r2, #20] @ zero_extendqisi2 bl NandcWaitFlashReady mov ip, fp - b .L985 -.L990: + b .L992 +.L997: add r4, r4, #1 ldrb r1, [fp, #1] @ zero_extendqisi2 mov r0, r6 - ldr r2, .L997+4 + ldr r2, .L1004+4 uxtb r4, r4 str ip, [sp, #0] cmp r4, r9 @@ -8319,25 +8383,25 @@ HynixReadRetrial: bl FlashReadRawPage ldr ip, [sp, #0] cmn r0, #1 - beq .L987 + beq .L994 ldrb r3, [ip, #3836] @ zero_extendqisi2 cmn r5, #1 moveq r5, r0 add r3, r3, r3, asl #1 cmp r0, r3, lsr #2 - bcc .L996 + bcc .L1003 mov r7, #0 mov sl, r7 -.L987: +.L994: add r8, r8, #1 -.L985: +.L992: cmp r8, r9 - bcc .L990 - b .L989 -.L996: + bcc .L997 + b .L996 +.L1003: mov r5, r0 -.L989: - ldr r3, .L997 +.L996: + ldr r3, .L1004 add r6, r3, r6 ldr r2, [r3, #3624] ldrb r3, [r3, #3836] @ zero_extendqisi2 @@ -8355,9 +8419,9 @@ HynixReadRetrial: moveq r0, r5 movne r0, #256 ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L998: +.L1005: .align 2 -.L997: +.L1004: .word .LANCHOR0 .word .LANCHOR0+4 .fnend @@ -8367,113 +8431,150 @@ HynixReadRetrial: .type MicronReadRetrial, %function MicronReadRetrial: .fnstart - @ args = 0, pretend = 0, frame = 16 + @ args = 0, pretend = 0, frame = 24 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} - mov r9, r0 - ldr r4, .L1012 mov sl, r3 - .pad #28 - sub sp, sp, #28 - ldrb r0, [r4, #3836] @ zero_extendqisi2 - ldrb r3, [r4, #928] @ zero_extendqisi2 - str r1, [sp, #16] + ldr r3, .L1024 + mov r9, r0 + .pad #36 + sub sp, sp, #36 + ldrb r0, [r3, #3836] @ zero_extendqisi2 + ldrb r3, [r3, #928] @ zero_extendqisi2 + str r1, [sp, #24] cmp r3, #0 str r2, [sp, #20] addeq r0, r0, r0, asl #1 ubfxeq r0, r0, #2, #8 - beq .L1011 + beq .L1023 mov r1, #3 bl __aeabi_idiv uxtb r0, r0 -.L1011: - add r4, r4, r9, asl #3 - str r0, [sp, #12] +.L1023: +.L1008: + mov r2, #0 + ldr r3, .L1024 + mvn r4, #0 + mov r6, r2 + add r3, r3, r9, asl #3 + str r0, [sp, #16] + str r2, [sp, #12] + str r3, [sp, #28] +.L1018: mov r0, r9 - mov r8, #0 + mov fp, #0 bl NandcWaitFlashReady - ldrb r7, [r4, #868] @ zero_extendqisi2 - ldr r6, [r4, #864] - mov fp, r8 + ldr r2, [sp, #28] + ldrb r7, [r2, #868] @ zero_extendqisi2 + ldr r8, [r2, #864] add r7, r7, #8 - mvn r4, #0 - add r5, r6, r7, asl #8 - b .L1002 -.L1006: + add r5, r8, r7, asl #8 + b .L1009 +.L1013: mov r3, #239 mov r0, #200 str r3, [r5, #8] mov r3, #137 str r3, [r5, #4] bl NandcDelayns - add ip, r8, #1 + add ip, fp, #1 mov r0, r9 str ip, [r5, #0] - ldr r1, [sp, #16] + ldr r1, [sp, #24] mov r3, sl - str fp, [r5, #0] + str r6, [r5, #0] ldr r2, [sp, #20] - str fp, [r5, #0] - str fp, [r5, #0] + str r6, [r5, #0] + str r6, [r5, #0] str ip, [sp, #8] bl FlashReadRawPage ldr ip, [sp, #8] cmn r0, #1 - beq .L1003 + beq .L1010 cmn r4, #1 - ldr r2, [sp, #12] + ldr r2, [sp, #16] moveq r4, r0 cmp r0, r2 - bcc .L1010 + bcc .L1020 mov sl, #0 str sl, [sp, #20] -.L1003: - mov r8, ip -.L1002: - ldr r2, .L1012+4 - ldrb r3, [r2, #140] @ zero_extendqisi2 - cmp r8, r3 - bcc .L1006 - b .L1005 .L1010: + mov fp, ip +.L1009: + ldr r2, .L1024+4 + ldrb r3, [r2, #140] @ zero_extendqisi2 + cmp fp, r3 + bcc .L1013 + b .L1012 +.L1020: mov r4, r0 -.L1005: + mov sl, #0 + str sl, [sp, #20] +.L1012: mov r3, #239 mov r0, #200 str r3, [r5, #8] mov r3, #137 str r3, [r5, #4] bl NandcDelayns - ldr r2, [sp, #12] - mov r3, #0 - str r3, [r6, r7, asl #8] + ldr r2, [sp, #16] + str r6, [r8, r7, asl #8] cmp r4, r2 - str r3, [r6, r7, asl #8] - str r3, [r6, r7, asl #8] - str r3, [r6, r7, asl #8] + str r6, [r8, r7, asl #8] + str r6, [r8, r7, asl #8] movcc r3, #0 movcs r3, #1 cmn r4, #1 + str r6, [r8, r7, asl #8] moveq r3, #0 cmp r3, #0 movne r4, #256 cmn r4, #1 + movne r5, #0 + moveq r5, #1 + cmn r4, #1 cmpne r4, #256 - bne .L1008 - ldr r0, .L1012+8 - mov r1, r8 - ldr r2, [sp, #16] - mov r3, r8 + bne .L1015 + mov r3, fp + ldr r0, .L1024+8 + mov r1, fp + ldr r2, [sp, #24] str r4, [sp, #0] bl printk -.L1008: + ldr r3, [sp, #12] + cmp r3, #0 + bne .L1016 + ldr r2, .L1024 + ldrb r3, [r2, #928] @ zero_extendqisi2 + cmp r3, #0 + moveq r5, #0 + andne r5, r5, #1 + cmp r5, #0 + beq .L1017 + mov r0, r9 + mov r1, #3 + bl micron_auto_read_calibration_config + mov r3, #1 + str r3, [sp, #12] + b .L1018 +.L1015: + ldr r2, [sp, #12] + cmp r2, #0 + beq .L1017 +.L1016: + mov r0, r9 + mov r1, #0 + bl micron_auto_read_calibration_config + cmn r4, #1 + movne r4, #256 +.L1017: mov r0, r4 - add sp, sp, #28 + add sp, sp, #36 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1013: +.L1025: .align 2 -.L1012: +.L1024: .word .LANCHOR0 .word .LANCHOR2 .word .LC90 @@ -8493,17 +8594,17 @@ SamsungReadRetrial: mov r6, r3 mov r9, r1 bl NandcWaitFlashReady - ldr ip, .L1023 + ldr ip, .L1035 mov r5, #1 mvn r4, #0 - ldr fp, .L1023+4 + ldr fp, .L1035+4 add r3, ip, r8, asl #3 ldrb sl, [r3, #868] @ zero_extendqisi2 ldr r2, [r3, #864] add sl, sl, #8 add sl, r2, sl, asl #8 - b .L1015 -.L1019: + b .L1027 +.L1031: mov r0, sl uxtb r1, r5 str ip, [sp, #4] @@ -8515,30 +8616,30 @@ SamsungReadRetrial: bl FlashReadRawPage ldr ip, [sp, #4] cmn r0, #1 - beq .L1016 + beq .L1028 ldrb r3, [ip, #3836] @ zero_extendqisi2 cmn r4, #1 moveq r4, r0 add r3, r3, r3, asl #1 cmp r0, r3, lsr #2 - bcc .L1022 + bcc .L1034 mov r6, #0 mov r7, r6 -.L1016: +.L1028: add r5, r5, #1 -.L1015: +.L1027: ldrb r3, [fp, #140] @ zero_extendqisi2 add r3, r3, #1 cmp r5, r3 - bcc .L1019 - b .L1018 -.L1022: + bcc .L1031 + b .L1030 +.L1034: mov r4, r0 -.L1018: +.L1030: mov r0, sl mov r1, #0 bl SamsungSetRRPara - ldr r3, .L1023 + ldr r3, .L1035 adds r0, r4, #1 ldrb r3, [r3, #3836] @ zero_extendqisi2 movne r0, #1 @@ -8550,9 +8651,9 @@ SamsungReadRetrial: moveq r0, r4 movne r0, #256 ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1024: +.L1036: .align 2 -.L1023: +.L1035: .word .LANCHOR0 .word .LANCHOR2 .fnend @@ -8571,7 +8672,7 @@ ToshibaReadRetrial: mov r9, r2 mov r7, r3 bl NandcWaitFlashReady - ldr r3, .L1046 + ldr r3, .L1058 add r2, r3, r8, asl #3 ldr r1, [r2, #864] ldrb r4, [r2, #868] @ zero_extendqisi2 @@ -8582,53 +8683,53 @@ ToshibaReadRetrial: uxtb r2, r2 cmp r2, #1 movls sl, #0 - bls .L1026 + bls .L1038 ldrb sl, [r3, #3780] @ zero_extendqisi2 cmp sl, #0 - beq .L1027 + beq .L1039 mov r0, #0 mov sl, #1 bl NandcSetDdrMode -.L1027: +.L1039: mov r3, #92 str r3, [r4, #8] mov r3, #197 str r3, [r4, #8] -.L1026: +.L1038: mov r6, #1 mvn r5, #0 - ldr fp, .L1046 - b .L1028 -.L1037: + ldr fp, .L1058 + b .L1040 +.L1049: ldrb r3, [fp, #3761] @ zero_extendqisi2 mov r0, r4 uxtb r1, r6 sub r3, r3, #67 uxtb r3, r3 cmp r3, #1 - bhi .L1029 + bhi .L1041 bl SandiskSetRRPara - b .L1030 -.L1029: + b .L1042 +.L1041: bl ToshibaSetRRPara -.L1030: - ldr r2, .L1046 +.L1042: + ldr r2, .L1058 ldrb r3, [r2, #3761] @ zero_extendqisi2 cmp r3, #34 - bne .L1031 - ldr r2, .L1046+4 + bne .L1043 + ldr r2, .L1058+4 ldrb r3, [r2, #140] @ zero_extendqisi2 sub r3, r3, #3 cmp r6, r3 moveq r3, #179 streq r3, [r4, #8] -.L1031: +.L1043: cmp sl, #0 mov r3, #38 str r3, [r4, #8] mov r3, #93 str r3, [r4, #8] - beq .L1032 + beq .L1044 mov r0, #4 bl NandcSetDdrMode ldr r1, [sp, #4] @@ -8641,50 +8742,50 @@ ToshibaReadRetrial: str r3, [sp, #0] bl NandcSetDdrMode ldr r3, [sp, #0] - b .L1033 -.L1032: + b .L1045 +.L1044: mov r3, r7 mov r0, r8 ldr r1, [sp, #4] mov r2, r9 bl FlashReadRawPage mov r3, r0 -.L1033: +.L1045: cmn r3, #1 - beq .L1034 + beq .L1046 ldrb r2, [fp, #3836] @ zero_extendqisi2 cmn r5, #1 moveq r5, r3 add r2, r2, r2, asl #1 cmp r3, r2, lsr #2 - bcc .L1045 + bcc .L1057 mov r7, #0 mov r9, r7 -.L1034: +.L1046: add r6, r6, #1 -.L1028: - ldr r2, .L1046+4 +.L1040: + ldr r2, .L1058+4 ldrb r3, [r2, #140] @ zero_extendqisi2 add r3, r3, #1 cmp r6, r3 - bcc .L1037 - b .L1036 -.L1045: + bcc .L1049 + b .L1048 +.L1057: mov r5, r3 -.L1036: - ldr r6, .L1046 +.L1048: + ldr r6, .L1058 mov r0, r4 mov r1, #0 ldrb r3, [r6, #3761] @ zero_extendqisi2 sub r3, r3, #67 uxtb r3, r3 cmp r3, #1 - bhi .L1038 + bhi .L1050 bl SandiskSetRRPara - b .L1039 -.L1038: + b .L1051 +.L1050: bl ToshibaSetRRPara -.L1039: +.L1051: mov r3, #255 str r3, [r4, #8] ldrb r3, [r6, #3836] @ zero_extendqisi2 @@ -8699,15 +8800,15 @@ ToshibaReadRetrial: movne r5, #256 bl NandcWaitFlashReady cmp sl, #0 - beq .L1041 + beq .L1053 mov r0, #4 bl NandcSetDdrMode -.L1041: +.L1053: mov r0, r5 ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1047: +.L1059: .align 2 -.L1046: +.L1058: .word .LANCHOR0 .word .LANCHOR2 .fnend @@ -8722,9 +8823,9 @@ FlashSavePhyInfo: stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} .save {r3, r4, r5, r6, r7, r8, sl, lr} mov r6, #0 - ldr r5, .L1055 - ldr r7, .L1055+4 - ldr r8, .L1055+8 + ldr r5, .L1067 + ldr r7, .L1067+4 + ldr r8, .L1067+8 ldr r3, [r5, #148] ldrb r0, [r5, #152] @ zero_extendqisi2 str r3, [r5, #144] @@ -8734,7 +8835,7 @@ FlashSavePhyInfo: ldr r0, [r5, #148] bl ftl_memset ldr r3, [r5, #144] - ldr r1, .L1055+12 + ldr r1, .L1067+12 mov r2, #32 str r8, [r3, #0] ldr r4, [r5, #144] @@ -8747,15 +8848,15 @@ FlashSavePhyInfo: str r3, [r4, #1076] bl memcpy add r0, r4, #80 - ldr r1, .L1055+16 + ldr r1, .L1067+16 mov r2, #8 bl memcpy add r0, r4, #96 - ldr r1, .L1055+20 + ldr r1, .L1067+20 mov r2, #32 bl memcpy ldr r0, [r5, #144] - ldr r1, .L1055+24 + ldr r1, .L1067+24 mov r2, #32 add r0, r0, #160 bl memcpy @@ -8779,7 +8880,7 @@ FlashSavePhyInfo: mov r0, #0 bl flash_enter_slc_mode mov r4, r6 -.L1051: +.L1063: ldr r1, [r7, #856] mov r0, #0 mov r2, r0 @@ -8805,17 +8906,17 @@ FlashSavePhyInfo: mul r1, r1, r4 bl FlashReadRawPage cmn r0, #1 - beq .L1049 + beq .L1061 ldr sl, [r5, #144] ldr r3, [sl, #0] cmp r3, r8 - bne .L1049 + bne .L1061 add r0, sl, #12 movw r1, #2036 bl JSHash ldr r3, [sl, #8] cmp r3, r0 - bne .L1049 + bne .L1061 add r3, r4, #1 str r3, [r5, #156] ldr r3, [r7, #856] @@ -8823,21 +8924,21 @@ FlashSavePhyInfo: cmp r6, #1 mul r3, r3, r4 str r3, [r5, #160] - bhi .L1050 -.L1049: + bhi .L1062 +.L1061: add r4, r4, #1 cmp r4, #4 - bne .L1051 -.L1050: + bne .L1063 +.L1062: mov r0, #0 bl flash_exit_slc_mode cmp r6, #0 mvneq r0, #0 movne r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L1056: +.L1068: .align 2 -.L1055: +.L1067: .word .LANCHOR2 .word .LANCHOR0 .word 1312902724 @@ -8860,34 +8961,34 @@ FlashReadIdbDataRaw: sub sp, sp, #20 mov r2, #4 mov sl, r0 - ldr r1, .L1068 + ldr r1, .L1080 add r0, sp, #12 bl memcpy - ldr r3, .L1068+4 + ldr r3, .L1080+4 ldrb r2, [r3, #3836] @ zero_extendqisi2 str r2, [sp, #4] ldr r2, [r3, #3776] - ldr r3, .L1068+8 + ldr r3, .L1080+8 cmp r2, r3 - bne .L1058 + bne .L1070 mov r0, #0 bl flash_enter_slc_mode -.L1058: - ldr r7, .L1068+4 +.L1070: + ldr r7, .L1080+4 mov r0, sl mov r1, #0 mov r2, #2048 bl ftl_memset mvn r8, #0 mov r4, #2 - ldr r9, .L1068+12 + ldr r9, .L1080+12 mov fp, r7 - b .L1059 -.L1066: + b .L1071 +.L1078: mov r6, #0 -.L1061: +.L1073: add r3, sp, #12 - ldr r5, .L1068+12 + ldr r5, .L1080+12 ldrb r0, [r3, r6] @ zero_extendqisi2 bl FlashBchSel ldr r1, [r7, #856] @@ -8897,19 +8998,19 @@ FlashReadIdbDataRaw: mul r1, r1, r4 bl FlashReadRawPage cmn r0, #1 - bne .L1060 + bne .L1072 add r6, r6, #1 cmp r6, #4 - bne .L1061 - b .L1062 -.L1060: + bne .L1073 + b .L1074 +.L1072: ldr r3, [r5, #148] ldr r2, [r3, #0] - ldr r3, .L1068+16 + ldr r3, .L1080+16 cmp r2, r3 - bne .L1062 + bne .L1074 add r3, sp, #16 - ldr r0, .L1068+20 + ldr r0, .L1080+20 add r6, r3, r6 ldrb r1, [r6, #-4] @ zero_extendqisi2 bl printk @@ -8922,36 +9023,36 @@ FlashReadIdbDataRaw: strb r3, [fp, #853] ldr r3, [r5, #156] cmp r3, r4 - bls .L1065 + bls .L1077 str r4, [r5, #156] bl FlashSavePhyInfo mov r8, #0 -.L1062: +.L1074: add r4, r4, #1 -.L1059: +.L1071: ldrb r3, [r7, #853] @ zero_extendqisi2 cmp r4, r3 - bcc .L1066 - b .L1063 -.L1065: + bcc .L1078 + b .L1075 +.L1077: mov r8, #0 -.L1063: +.L1075: ldr r0, [sp, #4] bl FlashBchSel - ldr r3, .L1068+4 + ldr r3, .L1080+4 ldr r2, [r3, #3776] - ldr r3, .L1068+8 + ldr r3, .L1080+8 cmp r2, r3 - bne .L1064 + bne .L1076 mov r0, #0 bl flash_exit_slc_mode -.L1064: +.L1076: mov r0, r8 add sp, sp, #20 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1069: +.L1081: .align 2 -.L1068: +.L1080: .word .LANCHOR3+11 .word .LANCHOR0 .word 1446522928 @@ -8970,11 +9071,11 @@ FlashLoadPhyInfo: stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r2, #4 - ldr r1, .L1081 + ldr r1, .L1093 add r0, sp, #4 bl memcpy - ldr r5, .L1081+4 - ldr r2, .L1081+8 + ldr r5, .L1093+4 + ldr r2, .L1093+8 movw r3, #2902 mov r4, #0 mov r8, #4 @@ -8983,11 +9084,11 @@ FlashLoadPhyInfo: ldrh r9, [r2, r3] mvn r6, #0 ldr r3, [r5, #148] - ldr fp, .L1081+12 + ldr fp, .L1093+12 str r3, [r5, #144] bl flash_enter_slc_mode - b .L1071 -.L1073: + b .L1083 +.L1085: add r3, sp, #4 ldrb r0, [r3, r7] @ zero_extendqisi2 bl FlashBchSel @@ -8997,46 +9098,46 @@ FlashLoadPhyInfo: mov r3, r0 bl FlashReadRawPage cmn r0, #1 - bne .L1072 + bne .L1084 mov r0, #0 mov r1, sl ldr r2, [r5, #148] mov r3, r0 bl FlashReadRawPage cmn r0, #1 - bne .L1072 + bne .L1084 add r7, r7, #1 cmp r7, #4 - beq .L1074 - b .L1073 -.L1072: + beq .L1086 + b .L1085 +.L1084: ldr r7, [r5, #144] ldr r3, [r7, #0] cmp r3, fp - bne .L1074 + bne .L1086 cmp r6, #0 - bne .L1075 - ldr r2, .L1081+8 + bne .L1087 + ldr r2, .L1093+8 movw r3, #2902 mov r0, r4 ldrh r1, [r2, r3] bl __aeabi_uidiv - ldr r3, .L1081+4 + ldr r3, .L1093+4 add r0, r0, #1 str r0, [r3, #156] mov r0, r6 - b .L1080 -.L1075: + b .L1092 +.L1087: add r0, r7, #12 movw r1, #2036 bl JSHash ldr r3, [r7, #8] cmp r3, r0 - bne .L1074 - ldr r6, .L1081+16 + bne .L1086 + ldr r6, .L1093+16 add r1, r7, #160 mov r2, #32 - ldr r0, .L1081+20 + ldr r0, .L1093+20 bl memcpy add r0, r6, #896 add r1, r7, #192 @@ -9047,7 +9148,7 @@ FlashLoadPhyInfo: mov r2, #852 bl memcpy ldr r3, [r7, #1076] - ldr r2, .L1081+8 + ldr r2, .L1093+8 mov r0, r4 str r4, [r5, #160] strb r3, [r6, #3780] @@ -9062,23 +9163,23 @@ FlashLoadPhyInfo: streq r3, [r5, #156] ldrh r3, [r7, #14] strb r3, [r5, #164] -.L1074: +.L1086: subs r8, r8, #1 add r4, r4, r9 - beq .L1078 -.L1071: + beq .L1090 +.L1083: add sl, r4, #1 mov r7, #0 - b .L1073 -.L1078: + b .L1085 +.L1090: mov r0, r8 -.L1080: +.L1092: bl flash_exit_slc_mode mov r0, r6 ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1082: +.L1094: .align 2 -.L1081: +.L1093: .word .LANCHOR3+11 .word .LANCHOR2 .word .LANCHOR1 @@ -9097,7 +9198,7 @@ FlashDdrTunningRead: stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov sl, r3 - ldr r4, .L1104 + ldr r4, .L1116 .pad #20 sub sp, sp, #20 mov fp, r0 @@ -9113,7 +9214,7 @@ FlashDdrTunningRead: ldr r3, [sp, #56] cmp r3, #0 moveq r8, #1024 - beq .L1085 + beq .L1097 mov r0, #1 bl FlashSetInterfaceMode mov r0, #1 @@ -9131,21 +9232,21 @@ FlashDdrTunningRead: ldrb r0, [r4, #3772] @ zero_extendqisi2 bl NandcSetMode cmn r8, #1 - beq .L1086 - ldr r0, .L1104+4 + beq .L1098 + ldr r0, .L1116+4 mov r2, r8 ldr r1, [sp, #0] bl printk cmp r8, #9 - bhi .L1087 + bhi .L1099 add r4, r4, fp, asl #3 ldr r3, [r4, #864] ldr r2, [r3, #3840] ldr r2, [r3, #0] orr r2, r2, #131072 str r2, [r3, #0] -.L1087: - ldr r3, .L1104+8 +.L1099: + ldr r3, .L1116+8 ldr r2, [r3, #168] add r2, r2, #1 str r2, [r3, #168] @@ -9153,15 +9254,15 @@ FlashDdrTunningRead: movcs sl, #0 strcs sl, [r3, #168] movcs r9, sl - bcc .L1086 -.L1085: + bcc .L1098 +.L1097: mov r4, #0 str fp, [sp, #4] mov r5, r4 mvn r6, #0 mov fp, r4 str r4, [sp, #8] -.L1092: +.L1104: uxtb r0, r7 bl NandcSetDdrPara mov r3, sl @@ -9171,79 +9272,79 @@ FlashDdrTunningRead: bl FlashReadRawPage add r3, r8, #1 cmp r0, r3 - bhi .L1088 + bhi .L1100 cmp r0, #2 - bhi .L1098 + bhi .L1110 add r5, r5, #1 cmp r5, #9 - bls .L1098 + bls .L1110 mov ip, fp rsb r4, r5, r7 ldr fp, [sp, #4] mov r8, r0 mov r6, #0 - b .L1090 -.L1088: + b .L1102 +.L1100: cmp fp, r5 - bcs .L1099 + bcs .L1111 cmp r5, #7 rsb r3, r5, r4 str r3, [sp, #8] - bhi .L1103 + bhi .L1115 mov fp, r5 - b .L1099 -.L1098: + b .L1111 +.L1110: mov r6, #0 mov r4, r7 mov r8, r0 mov sl, r6 mov r9, r6 - b .L1089 -.L1099: + b .L1101 +.L1111: mov r5, #0 -.L1089: +.L1101: add r7, r7, #2 cmp r7, #69 - bls .L1092 + bls .L1104 mov ip, fp ldr fp, [sp, #4] -.L1090: +.L1102: cmp ip, r5 - bcc .L1093 - b .L1091 -.L1103: + bcc .L1105 + b .L1103 +.L1115: ldr fp, [sp, #4] -.L1091: +.L1103: ldr r4, [sp, #8] -.L1093: +.L1105: cmp r4, #0 - beq .L1094 - ldr r0, .L1104+12 + beq .L1106 + ldr r0, .L1116+12 mov r1, r4 bl printk uxtb r0, r4 bl NandcSetDdrPara -.L1094: +.L1106: cmn r6, #1 - bne .L1086 - ldr r0, .L1104+16 + bne .L1098 + ldr r0, .L1116+16 mov r1, fp ldr r2, [sp, #0] bl printk ldr r3, [sp, #56] cmp r3, #0 moveq r8, r6 - beq .L1086 + beq .L1098 ldr r3, [sp, #12] ubfx r0, r3, #8, #8 bl NandcSetDdrPara -.L1086: +.L1098: mov r0, r8 add sp, sp, #20 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1105: +.L1117: .align 2 -.L1104: +.L1116: .word .LANCHOR0 .word .LC92 .word .LANCHOR2 @@ -9261,7 +9362,7 @@ FlashDdrParaScan: stmfd sp!, {r0, r1, r4, r5, r6, r7, r8, lr} .save {r0, r1, r4, r5, r6, r7, r8, lr} mov r7, r0 - ldr r5, .L1110 + ldr r5, .L1122 mov r4, #0 mov r6, r1 ldrb r0, [r5, #3772] @ zero_extendqisi2 @@ -9281,30 +9382,30 @@ FlashDdrParaScan: mov r0, r7 bl FlashReadRawPage cmn r0, #1 - beq .L1107 + beq .L1119 cmn r8, #1 - bne .L1108 -.L1107: + bne .L1120 +.L1119: ldrb r3, [r5, #3772] @ zero_extendqisi2 tst r3, #1 - beq .L1108 + beq .L1120 mov r0, #1 bl FlashSetInterfaceMode mov r0, #1 bl NandcSetMode - ldr r3, .L1110 + ldr r3, .L1122 mov r2, #0 strb r2, [r3, #3780] - b .L1109 -.L1108: + b .L1121 +.L1120: mov r3, #1 strb r3, [r5, #3780] -.L1109: +.L1121: mov r0, #0 ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, pc} -.L1111: +.L1123: .align 2 -.L1110: +.L1122: .word .LANCHOR0 .fnend .size FlashDdrParaScan, .-FlashDdrParaScan @@ -9324,11 +9425,11 @@ FlashReadPage: bl FlashReadRawPage cmn r0, #1 mov r4, r0 - bne .L1113 - ldr r7, .L1118 + bne .L1125 + ldr r7, .L1130 ldrb r9, [r7, #860] @ zero_extendqisi2 cmp r9, #0 - beq .L1114 + beq .L1126 mov r3, #0 mov r0, r5 strb r3, [r7, #860] @@ -9339,12 +9440,12 @@ FlashReadPage: strb r9, [r7, #860] cmn r0, #1 movne r4, r0 - bne .L1113 -.L1114: - ldr r7, .L1118 + bne .L1125 +.L1126: + ldr r7, .L1130 ldrb r3, [r7, #3780] @ zero_extendqisi2 cmp r3, #0 - beq .L1113 + beq .L1125 ldr r3, [r7, #3012] mov r0, r5 mov r1, r6 @@ -9356,22 +9457,22 @@ FlashReadPage: bl FlashDdrTunningRead cmn r0, #1 mov r4, r0 - beq .L1115 + beq .L1127 ldrb r3, [r7, #3836] @ zero_extendqisi2 cmp r0, r3, lsr #1 - bls .L1113 -.L1115: + bls .L1125 +.L1127: ubfx r0, r9, #8, #8 bl NandcSetDdrPara -.L1113: - ldr r7, .L1118+4 +.L1125: + ldr r7, .L1130+4 ldr ip, [r7, #172] adds r3, ip, #0 movne r3, #1 cmn r4, #1 movne r3, #0 cmp r3, #0 - beq .L1116 + beq .L1128 mov r1, r6 mov r2, r8 mov r3, sl @@ -9380,15 +9481,15 @@ FlashReadPage: mov r2, r5 mov r3, r6 mov r4, r0 - ldr r0, .L1118+8 + ldr r0, .L1130+8 mov r1, r4 bl printk cmn r4, #1 - bne .L1116 - ldr r3, .L1118 + bne .L1128 + ldr r3, .L1130 ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L1116 + beq .L1128 mov r0, r5 bl flash_enter_slc_mode ldr ip, [r7, #172] @@ -9400,12 +9501,12 @@ FlashReadPage: mov r4, r0 mov r0, r5 bl flash_exit_slc_mode -.L1116: +.L1128: mov r0, r4 ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, pc} -.L1119: +.L1131: .align 2 -.L1118: +.L1130: .word .LANCHOR0 .word .LANCHOR2 .word .LC95 @@ -9418,7 +9519,7 @@ FlashReadSlc2KPages: .fnstart @ args = 0, pretend = 0, frame = 16 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L1133 + ldr r3, .L1145 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r8, r1 @@ -9428,9 +9529,9 @@ FlashReadSlc2KPages: ldrb sl, [r3, #2901] @ zero_extendqisi2 mov r4, r0 mov r7, #0 - ldr r6, .L1133+4 - b .L1121 -.L1130: + ldr r6, .L1145+4 + b .L1133 +.L1142: rsb r3, r7, r8 add r2, sp, #20 mov r0, r4 @@ -9444,7 +9545,7 @@ FlashReadSlc2KPages: cmp r3, r2 mvncs r3, #0 strcs r3, [r4, #0] - bcs .L1123 + bcs .L1135 add r3, r6, r3 ldrb r5, [r3, #3764] @ zero_extendqisi2 mov r0, r5 @@ -9503,48 +9604,48 @@ FlashReadSlc2KPages: strne r3, [r4, #0] ldr r3, [r4, #12] cmp r3, #0 - beq .L1128 + beq .L1140 ldr r2, [r3, #8] cmn r2, #1 - bne .L1128 + bne .L1140 ldr r3, [r3, #0] cmn r3, #1 strne r2, [r4, #0] -.L1128: +.L1140: ldr r3, [r4, #0] cmn r3, #1 - bne .L1123 + bne .L1135 ldr r1, [r4, #4] - ldr r0, .L1133+8 + ldr r0, .L1145+8 ldrb r2, [r6, #3836] @ zero_extendqisi2 bl printk ldr r1, [r4, #8] cmp r1, #0 - beq .L1129 - ldr r0, .L1133+12 + beq .L1141 + ldr r0, .L1145+12 mov r2, #4 mov r3, #8 bl rknand_print_hex -.L1129: +.L1141: ldr r1, [r4, #12] cmp r1, #0 - beq .L1123 + beq .L1135 mov r2, #4 - ldr r0, .L1133+16 + ldr r0, .L1145+16 mov r3, r2 bl rknand_print_hex -.L1123: +.L1135: add r7, r7, #1 add r4, r4, #36 -.L1121: +.L1133: cmp r7, r8 - bne .L1130 + bne .L1142 mov r0, #0 add sp, sp, #28 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1134: +.L1146: .align 2 -.L1133: +.L1145: .word .LANCHOR1 .word .LANCHOR0 .word .LC96 @@ -9559,7 +9660,7 @@ FlashReadPages: .fnstart @ args = 0, pretend = 0, frame = 40 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L1177 + ldr r3, .L1189 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} .pad #52 @@ -9569,22 +9670,22 @@ FlashReadPages: str r1, [sp, #28] str r2, [sp, #32] str r3, [sp, #24] - ldr r3, .L1177+4 + ldr r3, .L1189+4 ldrb r8, [r3, #852] @ zero_extendqisi2 ldrb ip, [r3, #860] @ zero_extendqisi2 cmp r8, #0 str ip, [sp, #36] moveq sl, r8 - beq .L1136 + beq .L1148 bl FlashReadSlc2KPages - b .L1137 -.L1164: + b .L1149 +.L1176: mov r3, #36 ldr ip, [sp, #28] mul r3, r3, sl add r2, sp, #44 ldr r1, [sp, #32] - ldr fp, .L1177+4 + ldr fp, .L1189+4 add r6, r9, r3 str r3, [sp, #16] rsb r3, sl, ip @@ -9601,10 +9702,10 @@ FlashReadPages: mvncs r3, #0 mov r7, r0 strcs r3, [r9, ip] - bcs .L1139 + bcs .L1151 add r3, fp, r3 ldrb r4, [r3, #3764] @ zero_extendqisi2 - ldr r3, .L1177+8 + ldr r3, .L1189+8 mov r0, r4 ldrb r3, [r3, #176] @ zero_extendqisi2 cmp r3, #0 @@ -9615,21 +9716,21 @@ FlashReadPages: sub r3, r2, #1 uxtb r3, r3 cmp r3, #6 - bhi .L1141 + bhi .L1153 add r1, fp, r4 cmp r2, #7 add fp, fp, r4 - ldr r2, .L1177+4 + ldr r2, .L1189+4 ldrb r3, [r1, #12] @ zero_extendqisi2 ldreqb r3, [r1, #20] @ zero_extendqisi2 ldrb r1, [fp, #3756] @ zero_extendqisi2 cmp r1, r3 - beq .L1141 + beq .L1153 ldrb r1, [r2, #1] @ zero_extendqisi2 mov r0, r4 add r2, r2, #4 bl HynixSetRRPara -.L1141: +.L1153: mov r0, r4 mov r5, r5, lsr #31 bl NandcFlashCs @@ -9639,44 +9740,44 @@ FlashReadPages: orreq r5, r5, #1 str r5, [sp, #20] cmp r5, #0 - beq .L1143 - ldr r3, .L1177+4 + beq .L1155 + ldr r3, .L1189+4 ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L1143 + beq .L1155 bl flash_enter_slc_mode - b .L1144 -.L1143: + b .L1156 +.L1155: bl flash_exit_slc_mode -.L1144: - ldr fp, .L1177+4 -.L1176: +.L1156: + ldr fp, .L1189+4 +.L1188: ldr r1, [sp, #44] cmn r1, #1 cmpeq r4, #255 moveq r3, #0 movne r3, #1 moveq r7, r3 - beq .L1146 + beq .L1158 cmp r7, #0 - beq .L1147 + beq .L1159 ldr r2, [fp, #856] mov r0, r4 add r2, r1, r2 bl FlashReadDpCmd - b .L1148 -.L1147: + b .L1160 +.L1159: mov r0, r4 bl FlashReadCmd -.L1148: +.L1160: mov r0, r4 bl NandcWaitFlashReady cmp r7, #0 - beq .L1146 + beq .L1158 mov r0, r4 ldr r1, [sp, #44] bl FlashReadDpDataOutCmd -.L1146: +.L1158: ldr r3, [r6, #12] mov r0, r4 ldr r2, [sp, #24] @@ -9693,12 +9794,12 @@ FlashReadPages: movne r2, #0 movne r7, #0 strneb r2, [fp, #860] - bne .L1176 -.L1149: + bne .L1188 +.L1161: cmp r7, #0 mov r5, r0 - beq .L1150 - ldr r3, .L1177+4 + beq .L1162 + ldr r3, .L1189+4 mov r0, r4 ldr r1, [r3, #856] ldr r3, [sp, #44] @@ -9719,17 +9820,17 @@ FlashReadPages: cmn r0, #1 mov r8, r0 moveq r7, #0 -.L1150: +.L1162: mov r0, r4 - ldr fp, .L1177+4 + ldr fp, .L1189+4 bl NandcFlashDeCs ldr ip, [sp, #36] cmn r5, #1 strb ip, [fp, #860] - bne .L1154 + bne .L1166 ldrb r3, [fp, #3780] @ zero_extendqisi2 cmp r3, #0 - beq .L1152 + beq .L1164 ldr r3, [fp, #3012] mov r0, r4 ldr r1, [sp, #44] @@ -9741,68 +9842,68 @@ FlashReadPages: bl FlashDdrTunningRead cmn r0, #1 mov r5, r0 - beq .L1153 + beq .L1165 ldrb r3, [fp, #3836] @ zero_extendqisi2 cmp r0, r3, lsr #1 - bls .L1170 -.L1153: + bls .L1182 +.L1165: ubfx r0, r7, #8, #8 bl NandcSetDdrPara cmn r5, #1 - bne .L1170 -.L1152: - ldr r3, .L1177+8 + bne .L1182 +.L1164: + ldr r3, .L1189+8 mov r0, r4 ldr r1, [sp, #44] ldr r2, [r6, #8] ldr r7, [r3, #172] ldr r3, [r6, #12] cmp r7, #0 - beq .L1155 + beq .L1167 blx r7 cmn r0, #1 mov r5, r0 - bne .L1172 - ldr r2, .L1177+4 + bne .L1184 + ldr r2, .L1189+4 ldr r3, [r2, #3624] ldrb r3, [r3, #19] @ zero_extendqisi2 sub r3, r3, #1 uxtb r3, r3 cmp r3, #6 - bhi .L1157 + bhi .L1169 ldrb r1, [r2, #1] @ zero_extendqisi2 mov r0, r4 add r2, r2, #4 mov r3, #0 bl HynixSetRRPara -.L1157: +.L1169: ldr r1, [sp, #44] mov r0, r4 ldr r2, [r6, #8] ldr r3, [r6, #12] bl FlashReadRawPage - ldr r7, .L1177+4 + ldr r7, .L1189+4 ldr r1, [r6, #4] ldrb r2, [r7, #3836] @ zero_extendqisi2 mov r5, r0 - ldr r0, .L1177+12 + ldr r0, .L1189+12 mov r3, r5 bl printk cmn r5, #1 - bne .L1172 + bne .L1184 ldrb r7, [r7, #928] @ zero_extendqisi2 cmp r7, #0 - beq .L1156 + beq .L1168 ldr ip, [sp, #20] mov r0, r4 cmp ip, #0 - beq .L1158 + beq .L1170 bl flash_enter_slc_mode - b .L1159 -.L1158: + b .L1171 +.L1170: bl flash_exit_slc_mode -.L1159: - ldr r3, .L1177+8 +.L1171: + ldr r3, .L1189+8 mov r0, r4 ldr r1, [sp, #44] ldr r2, [r6, #8] @@ -9810,27 +9911,27 @@ FlashReadPages: ldr r3, [r6, #12] blx ip mov r5, r0 - b .L1172 -.L1155: + b .L1184 +.L1167: bl FlashReadRawPage mov r5, r0 - b .L1156 -.L1170: + b .L1168 +.L1182: mov r7, #0 -.L1154: - ldr r3, .L1177+4 +.L1166: + ldr r3, .L1189+4 ldrb r3, [r3, #3836] @ zero_extendqisi2 add r3, r3, r3, asl #1 cmp r5, r3, lsr #2 - bls .L1156 - ldr r3, .L1177+8 + bls .L1168 + ldr r3, .L1189+8 ldr r3, [r3, #172] cmp r3, #0 moveq r5, #256 - b .L1156 -.L1172: + b .L1168 +.L1184: mov r7, #0 -.L1156: +.L1168: ldr ip, [sp, #16] cmp r5, #256 cmnne r5, #1 @@ -9840,32 +9941,32 @@ FlashReadPages: ldr ip, [sp, #16] ldr r3, [r9, ip] cmn r3, #1 - bne .L1161 - ldr r2, .L1177+4 + bne .L1173 + ldr r2, .L1189+4 ldr r1, [r6, #4] - ldr r0, .L1177+16 + ldr r0, .L1189+16 ldrb r2, [r2, #3836] @ zero_extendqisi2 bl printk ldr r1, [r6, #12] cmp r1, #0 - beq .L1161 + beq .L1173 mov r2, #4 - ldr r0, .L1177+20 + ldr r0, .L1189+20 mov r3, r2 bl rknand_print_hex -.L1161: +.L1173: cmp r7, #0 - beq .L1162 - ldr r3, .L1177+4 + beq .L1174 + ldr r3, .L1189+4 ldrb r3, [r3, #3836] @ zero_extendqisi2 add r3, r3, r3, asl #1 cmp r8, r3, lsr #2 - bls .L1163 - ldr r3, .L1177+8 + bls .L1175 + ldr r3, .L1189+8 ldr r3, [r3, #172] cmp r3, #0 moveq r8, #256 -.L1163: +.L1175: add r3, sl, #1 mov r2, #36 cmp r8, #256 @@ -9874,30 +9975,30 @@ FlashReadPages: movne r2, #0 str r8, [r9, r3] strne r2, [r9, r3] -.L1162: +.L1174: ldr ip, [sp, #20] add sl, sl, r7 cmp ip, #0 - beq .L1139 - ldr r3, .L1177+4 + beq .L1151 + ldr r3, .L1189+4 ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L1139 + beq .L1151 mov r0, r4 bl flash_exit_slc_mode -.L1139: +.L1151: add sl, sl, #1 -.L1136: +.L1148: ldr ip, [sp, #28] cmp sl, ip - bcc .L1164 + bcc .L1176 mov r0, #0 -.L1137: +.L1149: add sp, sp, #52 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1178: +.L1190: .align 2 -.L1177: +.L1189: .word .LANCHOR1 .word .LANCHOR0 .word .LANCHOR2 @@ -9913,7 +10014,7 @@ FtlGcScanTempBlk: .fnstart @ args = 0, pretend = 0, frame = 24 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r2, .L1204 + ldr r2, .L1216 movw r3, #3000 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} @@ -9924,38 +10025,38 @@ FtlGcScanTempBlk: mov r5, r0 str r1, [sp, #20] cmp r4, r3 - beq .L1200 + beq .L1212 cmp r4, #0 - bne .L1180 - b .L1181 -.L1200: + bne .L1192 + b .L1193 +.L1212: mov r4, #0 -.L1180: - ldr r2, .L1204+4 +.L1192: + ldr r2, .L1216+4 movw r3, #3916 ldr fp, [sp, #20] ldrh r3, [r2, r3] cmp fp, r3 - bne .L1182 -.L1181: + bne .L1194 +.L1193: bl FtlGcPageVarInit -.L1182: +.L1194: mov r7, #0 movw r8, #65535 mov sl, r7 mvn r3, #0 str r3, [sp, #16] -.L1195: +.L1207: ldrh r3, [r5, #0] strb sl, [r5, #8] cmp r3, r8 - beq .L1201 -.L1184: -.L1202: - ldr r3, .L1204+4 + beq .L1213 +.L1196: +.L1214: + ldr r3, .L1216+4 movw r2, #3848 ldrh r9, [r3, r2] - ldr r2, .L1204+8 + ldr r2, .L1216+8 ldr lr, [r2, #-972] ldr ip, [r2, #-1168] movw r2, #3928 @@ -9964,11 +10065,11 @@ FtlGcScanTempBlk: mov r6, r3 str r2, [sp, #12] mov r2, r5 - b .L1185 -.L1187: + b .L1197 +.L1199: ldrh r0, [r2, #16] cmp r0, r8 - beq .L1186 + beq .L1198 mov fp, #36 orr r0, r4, r0, asl #10 mla r1, fp, r6, lr @@ -9983,14 +10084,14 @@ FtlGcScanTempBlk: bic r0, r0, #3 add r0, ip, r0 str r0, [r1, #12] -.L1186: +.L1198: add r3, r3, #1 add r2, r2, #2 uxth r3, r3 -.L1185: +.L1197: cmp r3, r9 - bne .L1187 - ldr r9, .L1204+8 + bne .L1199 + ldr r9, .L1216+8 mov r1, r6 mov r2, #0 ldr r0, [r9, #-972] @@ -9999,8 +10100,8 @@ FtlGcScanTempBlk: mul r3, r3, r6 mov r6, #0 str r3, [sp, #12] - b .L1188 -.L1196: + b .L1200 +.L1208: ldr r1, [r9, #-972] add r3, r1, r6 ldr fp, [r3, #4] @@ -10012,55 +10113,54 @@ FtlGcScanTempBlk: ldr r1, [r1, r6] cmp r1, #0 mov r2, r0 - bne .L1189 + bne .L1201 ldr r3, [r3, #12] add r6, r6, #36 ldrh r1, [r3, #0] cmp r1, r8 - ldreq r3, .L1204+8 + ldreq r3, .L1216+8 moveq r1, #1 streq r1, [r3, #-1012] - beq .L1183 -.L1190: + beq .L1195 +.L1202: ldr r0, [r3, #12] mov r1, fp ldr r2, [r3, #8] bl FtlGcUpdatePage - b .L1188 -.L1189: + b .L1200 +.L1201: mov r2, fp - ldr r0, .L1204+12 + ldr r0, .L1216+12 ldrh r1, [r5, #0] bl printk - ldr r3, .L1204+4 + ldr r3, .L1216+4 ldr r2, [r3, #3840] cmp r2, #0 - bne .L1191 - ldrb r3, [r3, #928] @ zero_extendqisi2 - cmp r3, #0 - beq .L1192 -.L1191: - ldr r2, .L1204+8 - ldrh r3, [r5, #0] - ldr r2, [r2, #-2080] - mov r3, r3, asl #1 + bne .L1203 + ldrb r2, [r3, #928] @ zero_extendqisi2 + cmp r2, #0 + beq .L1204 +.L1203: + ldrh r1, [r5, #0] + ldr r2, [r3, #4048] + mov r3, r1, asl #1 ldrh r3, [r2, r3] cmp r3, #119 - bls .L1193 -.L1192: - ldr r3, .L1204+8 + bls .L1205 +.L1204: + ldr r3, .L1216+8 ldr r3, [r3, #-972] ldr r3, [r3, r6] cmn r3, #1 - bne .L1194 -.L1193: - ldr r3, .L1204+8 + bne .L1206 +.L1205: + ldr r3, .L1216+8 ldr r3, [r3, #-972] add r6, r3, r6 ldr r6, [r6, #4] str r6, [sp, #16] -.L1194: - ldr r2, .L1204+8 +.L1206: + ldr r2, .L1216+8 mov r4, #0 ldrh r3, [r5, #0] ldr r2, [r2, #-2016] @@ -10071,39 +10171,39 @@ FtlGcScanTempBlk: mvn r3, #0 strh r3, [r5, #0] @ movhi bl FtlGcPageVarInit - b .L1195 -.L1188: + b .L1207 +.L1200: ldr r3, [sp, #12] cmp r6, r3 - bne .L1196 + bne .L1208 ldr fp, [sp, #20] add r7, r7, #1 add r4, r4, #1 cmp r7, fp uxth r4, r4 - bcc .L1197 - ldr r2, .L1204 + bcc .L1209 + ldr r2, .L1216 movw r3, #3000 ldrh r1, [r2, r3] cmp r1, r8 - beq .L1197 + beq .L1209 add r1, r1, r7 strh r1, [r2, r3] @ movhi - ldr r2, .L1204+4 + ldr r2, .L1216+4 add r3, r3, #916 ldrh r3, [r2, r3] cmp r3, r4 - bhi .L1198 -.L1197: - ldr r2, .L1204+4 + bhi .L1210 +.L1209: + ldr r2, .L1216+4 movw r3, #3916 ldrh r3, [r2, r3] cmp r3, r4 - bhi .L1202 -.L1201: + bhi .L1214 +.L1213: mov r2, #0 -.L1183: - ldr r1, .L1204 +.L1195: + ldr r1, .L1216 movw r3, #3000 mvn r0, #0 strh r4, [r5, #2] @ movhi @@ -10112,13 +10212,13 @@ FtlGcScanTempBlk: mov r0, r5 mov r1, r4 bl ftl_sb_update_avl_pages -.L1198: +.L1210: ldr r0, [sp, #16] add sp, sp, #28 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1205: +.L1217: .align 2 -.L1204: +.L1216: .word .LANCHOR1 .word .LANCHOR0 .word .LANCHOR2 @@ -10126,104 +10226,433 @@ FtlGcScanTempBlk: .fnend .size FtlGcScanTempBlk, .-FtlGcScanTempBlk .align 2 - .global FtlScanSysBlk - .type FtlScanSysBlk, %function -FtlScanSysBlk: + .global FtlScanAllBlock + .type FtlScanAllBlock, %function +FtlScanAllBlock: .fnstart - @ args = 0, pretend = 0, frame = 24 + @ args = 0, pretend = 0, frame = 56 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .pad #84 + sub sp, sp, #84 + ldr r0, .L1228 + mov r5, #0 + ldr r1, .L1228+4 + bl printk + ldr r7, .L1228+8 + b .L1219 +.L1227: + add r4, sp, #80 + mov r0, r5 + ldr r6, .L1228+12 + mov r9, #36 + strh r5, [r4, #-48]! @ movhi + bl ftl_get_blk_mode + mov r2, r5, asl #1 + ldr ip, [r6, #-2016] + mov r1, r5 + ldrh r2, [ip, r2] + mov r3, r0 + ldr r0, .L1228+16 + bl printk + mov r0, r4 + bl make_superblock + movw r3, #3848 + ldrh sl, [r7, r3] + add r3, r3, #78 + add r0, r4, #14 + mov r4, #0 + ldrh r3, [r7, r3] + ldr r8, [r6, #-972] + ldr lr, [r6, #-1172] + str r3, [sp, #28] + movw r3, #3928 + ldrh ip, [r7, r3] + mov r3, r4 + ldr r6, [r6, #-1168] + b .L1220 +.L1222: + ldrh r1, [r0, #2]! + movw r2, #65535 + cmp r1, r2 + beq .L1221 + mla r2, r9, r4, r8 + ldr fp, [sp, #28] + mov r1, r1, asl #10 + str r1, [r2, #4] + mul r1, fp, r4 + add fp, r1, #3 + cmp r1, #0 + movlt r1, fp + bic r1, r1, #3 + add r1, lr, r1 + str r1, [r2, #8] + mul r1, ip, r4 + add r4, r4, #1 + uxth r4, r4 + add fp, r1, #3 + cmp r1, #0 + movlt r1, fp + bic r1, r1, #3 + add r1, r6, r1 + str r1, [r2, #12] +.L1221: + add r3, r3, #1 + uxth r3, r3 +.L1220: + cmp r3, sl + bne .L1222 + ldr sl, .L1228+12 + mov r1, r4 + mov r2, #0 mov r6, #0 - ldr r5, .L1264 - .pad #28 - sub sp, sp, #28 - ldr r4, .L1264+4 - mov r1, r6 - ldr r3, .L1264+8 - mov r7, #3936 - ldr r2, [r5, #3944] - ldr r0, [r4, #-1036] - mov sl, r4 - strh r6, [r4, r3] @ movhi - movw r3, #3962 - strh r6, [r5, r3] @ movhi - mov r2, r2, asl #2 - bl ftl_memset - ldr r2, [r5, #3944] - mov r1, r6 - ldr r0, [r4, #-1040] - mov r2, r2, asl #1 - bl ftl_memset - ldrh r2, [r5, r7] - mov r1, r6 - ldr r0, [r4, #-908] - mov r2, r2, asl #2 - bl ftl_memset - ldrh r2, [r5, r7] - mov r1, r6 - ldr r0, [r5, #3964] - mov r2, r2, asl #1 - bl ftl_memset - ldr r0, .L1264+12 - mov r1, #255 - mov r2, #12 - bl ftl_memset - mov r3, #3856 - ldrh r3, [r5, r3] - str r3, [sp, #8] - b .L1207 -.L1209: - add r3, r6, r5 - ldr r1, [sp, #8] - ldrb r0, [r3, #3874] @ zero_extendqisi2 - bl V2P_block - str r0, [sp, #0] - bl FtlBbmIsBadBlock - ldr r3, [sp, #0] - cmp r0, #0 - bne .L1208 - ldr r2, [r4, #-972] - mov r3, r3, asl #10 - mla r2, r9, r7, r2 - str r3, [r2, #4] - ldr r3, [r4, #-1172] - str r3, [r2, #8] - ldrh r3, [r6, r8] - mul r3, r3, r7 - add r7, r7, #1 - uxth r7, r7 - add r1, r3, #3 - cmp r3, #0 - movlt r3, r1 - ldr r1, [r4, #-1168] - bic r3, r3, #3 - add r3, r1, r3 - str r3, [r2, #12] -.L1208: + mov r8, r6 + ldr r0, [sl, #-972] + bl FlashReadPages + b .L1223 +.L1224: + ldr r2, [sl, #-972] + add r8, r8, #1 + ldrh r1, [sp, #32] + add r3, r2, r6 + uxth r8, r8 + ldr r0, [r3, #12] + ldr ip, [r3, #8] + ldr lr, [r0, #0] + str lr, [sp, #0] + ldr lr, [r0, #4] + str lr, [sp, #4] + ldr lr, [r0, #8] + str lr, [sp, #8] + ldr r0, [r0, #12] + str r0, [sp, #12] + ldr r0, [ip, #0] + str r0, [sp, #16] + ldr r0, [ip, #4] + str r0, [sp, #20] + ldr r0, .L1228+20 + ldr r2, [r2, r6] + add r6, r6, #36 + ldr r3, [r3, #4] + bl printk +.L1223: + cmp r8, r4 + ldr r9, .L1228+12 + bne .L1224 + ldr r0, [r9, #-972] + mov r1, r4 + mov r2, #1 + mov r6, #0 + bl FlashReadPages + mov r8, r6 + mov sl, r9 + b .L1225 +.L1226: + ldr r2, [sl, #-972] + add r8, r8, #1 + ldrh r1, [sp, #32] + add r3, r2, r6 + uxth r8, r8 + ldr r0, [r3, #12] + ldr ip, [r3, #8] + ldr lr, [r0, #0] + str lr, [sp, #0] + ldr lr, [r0, #4] + str lr, [sp, #4] + ldr lr, [r0, #8] + str lr, [sp, #8] + ldr r0, [r0, #12] + str r0, [sp, #12] + ldr r0, [ip, #0] + str r0, [sp, #16] + ldr r0, [ip, #4] + str r0, [sp, #20] + ldr r0, .L1228+24 + ldr r2, [r2, r6] + add r6, r6, #36 + ldr r3, [r3, #4] + bl printk +.L1225: + cmp r8, r4 + bne .L1226 add r5, r5, #1 uxth r5, r5 - b .L1242 -.L1255: - mov r7, #0 - movw fp, #3848 - mov r5, r7 - mov r9, #36 - movw r8, #3928 -.L1242: - ldrh r3, [r6, fp] +.L1219: + movw r3, #3858 + ldrh r3, [r7, r3] cmp r3, r5 - bhi .L1209 + bhi .L1227 + mov r0, #0 + add sp, sp, #84 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L1229: + .align 2 +.L1228: + .word .LC101 + .word .LANCHOR3+15 + .word .LANCHOR0 + .word .LANCHOR2 + .word .LC102 + .word .LC103 + .word .LC104 + .fnend + .size FtlScanAllBlock, .-FtlScanAllBlock + .align 2 + .global FtlDumpBlockInfo + .type FtlDumpBlockInfo, %function +FtlDumpBlockInfo: + .fnstart + @ args = 0, pretend = 0, frame = 56 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + ubfx r0, r0, #10, #16 + .pad #84 + sub sp, sp, #84 + mov r7, r1 + bl P2V_block_in_plane + ldr r5, .L1241 + ldr r1, .L1241+4 + movw r6, #3916 + ldrh r9, [r5, r6] + mov r4, r0 + ldr r0, .L1241+8 + bl printk + ldr r3, .L1241+12 + mov r1, r4 + ldr r0, .L1241+16 + ldr r2, [r3, #-2016] + mov r3, r4, asl #1 + ldrh r2, [r2, r3] + bl printk + add r0, sp, #80 + strh r4, [r0, #-48]! @ movhi + bl make_superblock + rsbs r7, r7, #1 + ldrb r3, [r5, #928] @ zero_extendqisi2 + movcc r7, #0 + cmp r3, #0 + moveq r7, #0 cmp r7, #0 - beq .L1210 - ldr r0, [r4, #-972] + beq .L1231 + mov r0, r4 + bl ftl_get_blk_mode + cmp r0, #1 + mov r7, r0 + movweq r3, #3918 + ldreqh r9, [r5, r3] +.L1231: + ldrh r3, [r5, r6] mov r1, r7 - mov r2, #1 - mov fp, r7 - bl FlashReadPages - mov r8, #0 - str r8, [sp, #12] + ldr r0, .L1241+20 + mov r2, r9 + bl printk + mov r6, #0 +.L1232: + ldr r3, .L1241 + movw r2, #3848 + movw r1, #3926 + mov r4, #0 + add r0, sp, #46 + ldrh sl, [r3, r2] + ldr r2, .L1241+12 + ldrh lr, [r3, r1] + ldr r8, [r2, #-972] + ldr r5, [r2, #-1172] + ldr ip, [r2, #-1168] + movw r2, #3928 + ldrh r2, [r3, r2] + mov r3, r4 + str r2, [sp, #28] + b .L1233 +.L1235: + ldrh r1, [r0, #2]! + movw r2, #65535 + cmp r1, r2 + beq .L1234 + mov fp, #36 + orr r1, r6, r1, asl #10 + mla r2, fp, r4, r8 + str r1, [r2, #4] + mul r1, lr, r4 + add fp, r1, #3 + cmp r1, #0 + movlt r1, fp + ldr fp, [sp, #28] + bic r1, r1, #3 + add r1, r5, r1 + str r1, [r2, #8] + mul r1, fp, r4 + add r4, r4, #1 + uxth r4, r4 + add fp, r1, #3 + cmp r1, #0 + movlt r1, fp + bic r1, r1, #3 + add r1, ip, r1 + str r1, [r2, #12] +.L1234: + add r3, r3, #1 + uxth r3, r3 +.L1233: + cmp r3, sl + bne .L1235 + ldr r8, .L1241+12 + mov r1, r4 + mov r2, r7 + mov r5, #0 + mov sl, r5 + ldr r0, [r8, #-972] + bl FlashReadPages + b .L1236 +.L1237: + ldr r2, [r8, #-972] + add sl, sl, #1 + ldrh r1, [sp, #32] + add r3, r2, r5 + uxth sl, sl + ldr r0, [r3, #12] + ldr ip, [r3, #8] + ldr lr, [r0, #0] + str lr, [sp, #0] + ldr lr, [r0, #4] + str lr, [sp, #4] + ldr lr, [r0, #8] + str lr, [sp, #8] + ldr r0, [r0, #12] + str r0, [sp, #12] + ldr r0, [ip, #0] + str r0, [sp, #16] + ldr r0, [ip, #4] + str r0, [sp, #20] + ldr r0, .L1241+24 + ldr r2, [r2, r5] + add r5, r5, #36 + ldr r3, [r3, #4] + bl printk +.L1236: + cmp sl, r4 + bne .L1237 + add r6, r6, #1 + uxth r6, r6 + cmp r6, r9 + bne .L1232 +.L1238: + mov r0, #0 + add sp, sp, #84 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L1242: + .align 2 .L1241: + .word .LANCHOR0 + .word .LANCHOR3+31 + .word .LC101 + .word .LANCHOR2 + .word .LC105 + .word .LC106 + .word .LC107 + .fnend + .size FtlDumpBlockInfo, .-FtlDumpBlockInfo + .align 2 + .global FtlScanSysBlk + .type FtlScanSysBlk, %function +FtlScanSysBlk: + .fnstart + @ args = 0, pretend = 0, frame = 24 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + mov r6, #0 + ldr r5, .L1301 + .pad #28 + sub sp, sp, #28 + ldr r4, .L1301+4 + mov r1, r6 + ldr r3, .L1301+8 + mov r7, #3936 + ldr r2, [r5, #3944] + ldr r0, [r4, #-1036] + mov sl, r4 + strh r6, [r4, r3] @ movhi + movw r3, #3962 + strh r6, [r5, r3] @ movhi + mov r2, r2, asl #2 + bl ftl_memset + ldr r2, [r5, #3944] + mov r1, r6 + ldr r0, [r4, #-1040] + mov r2, r2, asl #1 + bl ftl_memset + ldrh r2, [r5, r7] + mov r1, r6 + ldr r0, [r4, #-908] + mov r2, r2, asl #2 + bl ftl_memset + ldrh r2, [r5, r7] + mov r1, r6 + ldr r0, [r5, #3964] + mov r2, r2, asl #1 + bl ftl_memset + ldr r0, .L1301+12 + mov r1, #255 + mov r2, #12 + bl ftl_memset + mov r3, #3856 + ldrh r3, [r5, r3] + str r3, [sp, #8] + b .L1244 +.L1246: + add r3, r6, r5 + ldr r1, [sp, #8] + ldrb r0, [r3, #3874] @ zero_extendqisi2 + bl V2P_block + str r0, [sp, #0] + bl FtlBbmIsBadBlock + ldr r3, [sp, #0] + cmp r0, #0 + bne .L1245 + ldr r2, [r4, #-972] + mov r3, r3, asl #10 + mla r2, r9, r7, r2 + str r3, [r2, #4] + ldr r3, [r4, #-1172] + str r3, [r2, #8] + ldrh r3, [r6, r8] + mul r3, r3, r7 + add r7, r7, #1 + uxth r7, r7 + add r1, r3, #3 + cmp r3, #0 + movlt r3, r1 + ldr r1, [r4, #-1168] + bic r3, r3, #3 + add r3, r1, r3 + str r3, [r2, #12] +.L1245: + add r5, r5, #1 + uxth r5, r5 + b .L1279 +.L1292: + mov r7, #0 + movw fp, #3848 + mov r5, r7 + mov r9, #36 + movw r8, #3928 +.L1279: + ldrh r3, [r6, fp] + cmp r3, r5 + bhi .L1246 + cmp r7, #0 + beq .L1247 + ldr r0, [r4, #-972] + mov r1, r7 + mov r2, #1 + mov fp, r7 + bl FlashReadPages + mov r8, #0 + str r8, [sp, #12] +.L1278: ldr r3, [r4, #-972] add r2, r3, r8 ldr r3, [r3, r8] @@ -10231,9 +10660,9 @@ FtlScanSysBlk: cmn r3, #1 ldr r5, [r2, #12] ubfx r6, r6, #10, #16 - bne .L1211 + bne .L1248 mov r7, #16 -.L1213: +.L1250: ldr r0, [r4, #-972] mov r1, #1 mov r2, r1 @@ -10248,53 +10677,53 @@ FtlScanSysBlk: ldreq r3, [sl, #-972] mvneq r2, #0 streq r2, [r3, r8] - beq .L1211 -.L1212: + beq .L1248 +.L1249: ldr r3, [r4, #-972] ldr r3, [r3, r8] cmn r3, #1 - bne .L1211 + bne .L1248 sub r7, r7, #1 uxth r7, r7 cmp r7, #0 - bne .L1213 -.L1211: + bne .L1250 +.L1248: ldr r3, [r4, #-972] ldr r3, [r3, r8] cmn r3, #1 - beq .L1214 + beq .L1251 ldr r2, [r4, #-1804] ldr r3, [r5, #4] cmn r2, #1 - beq .L1215 + beq .L1252 cmp r2, r3 - bhi .L1216 -.L1215: + bhi .L1253 +.L1252: cmn r3, #1 addne r3, r3, #1 strne r3, [sl, #-1804] -.L1216: +.L1253: ldrh r3, [r5, #0] movw r2, #61604 cmp r3, r2 - beq .L1219 - bhi .L1222 + beq .L1256 + bhi .L1259 movw r2, #61574 cmp r3, r2 - bne .L1217 - b .L1262 -.L1222: + bne .L1254 + b .L1299 +.L1259: movw r2, #61634 cmp r3, r2 - beq .L1220 + beq .L1257 movw r2, #65535 cmp r3, r2 - bne .L1217 - b .L1263 -.L1220: - ldr r3, .L1264 + bne .L1254 + b .L1300 +.L1257: + ldr r3, .L1301 mov r9, r6 - ldr r1, .L1264+8 + ldr r1, .L1301+8 ldr ip, [r4, #-1036] ldr r0, [r3, #3944] ldrh r1, [r4, r1] @@ -10305,28 +10734,28 @@ FtlScanSysBlk: uxth r3, r3 sxth r2, r2 str r2, [sp, #4] - b .L1223 -.L1229: + b .L1260 +.L1266: mov r6, r2, asl #2 ldr r7, [r5, #4] str r6, [sp, #16] ldr r6, [ip, r2, asl #2] cmp r7, r6 - bls .L1224 + bls .L1261 ldr ip, [ip, #0] mov r6, r9 cmp ip, #0 - bne .L1225 + bne .L1262 cmp r1, r0 addne r1, r1, #1 - ldrne r0, .L1264+8 + ldrne r0, .L1301+8 strneh r1, [r4, r0] @ movhi -.L1225: +.L1262: mov r0, #0 sxth r9, r3 str r3, [sp, #4] - b .L1226 -.L1227: + b .L1263 +.L1264: ldr r7, [r4, #-1036] add ip, r1, #1 add r0, r0, #1 @@ -10338,10 +10767,10 @@ FtlScanSysBlk: ldr r7, [r4, #-1040] ldrh ip, [r7, ip] strh ip, [r7, r1] @ movhi -.L1226: +.L1263: sxth r1, r0 cmp r1, r9 - bne .L1227 + bne .L1264 ldr r1, [sl, #-1036] mov r2, r2, asl #1 ldr r0, [r5, #4] @@ -10350,29 +10779,29 @@ FtlScanSysBlk: str r0, [r1, ip] ldr r1, [sl, #-1040] strh r6, [r1, r2] @ movhi - b .L1228 -.L1224: + b .L1265 +.L1261: sub r3, r3, #1 uxth r3, r3 -.L1223: +.L1260: ldr r6, [sp, #4] sxth r2, r3 cmp r2, r6 - bgt .L1229 + bgt .L1266 mov r6, r9 -.L1228: +.L1265: sxth r3, r3 cmp r3, #0 - blt .L1217 - ldr r2, .L1264+8 - ldr r0, .L1264 + blt .L1254 + ldr r2, .L1301+8 + ldr r0, .L1301 ldrh r1, [r4, r2] ldr r0, [r0, #3944] rsb r0, r1, r0 sub r0, r0, #1 sxth r0, r0 cmp r3, r0 - bgt .L1217 + bgt .L1254 add r1, r1, #1 strh r1, [r4, r2] @ movhi ldr r2, [r4, #-1036] @@ -10380,9 +10809,9 @@ FtlScanSysBlk: str r1, [r2, r3, asl #2] mov r3, r3, asl #1 ldr r2, [r4, #-1040] - b .L1259 -.L1262: - ldr r1, .L1264 + b .L1296 +.L1299: + ldr r1, .L1301 mov r3, #3936 movw ip, #3962 mov r9, r6 @@ -10393,31 +10822,31 @@ FtlScanSysBlk: uxth r3, r2 rsb r2, r1, r2 str r2, [sp, #4] - b .L1230 -.L1236: + b .L1267 +.L1273: mov r6, r2, asl #2 ldr r7, [r5, #4] str r6, [sp, #16] ldr r6, [ip, r2, asl #2] cmp r7, r6 - bls .L1231 + bls .L1268 ldr ip, [ip, #0] mov r6, r9 cmp ip, #0 - bne .L1232 + bne .L1269 cmp r1, r0 addne r1, r1, #1 - ldrne ip, .L1264 + ldrne ip, .L1301 movwne r0, #3962 strneh r1, [ip, r0] @ movhi -.L1232: +.L1269: sxth ip, r3 mov r0, #0 str ip, [sp, #20] - ldr r9, .L1264 + ldr r9, .L1301 str r3, [sp, #4] - b .L1233 -.L1234: + b .L1270 +.L1271: ldr r7, [r4, #-908] add ip, r1, #1 add r0, r0, #1 @@ -10429,35 +10858,35 @@ FtlScanSysBlk: ldr r7, [r9, #3964] ldrh ip, [r7, ip] strh ip, [r7, r1] @ movhi -.L1233: +.L1270: ldr ip, [sp, #20] sxth r1, r0 cmp r1, ip - bne .L1234 + bne .L1271 ldr r1, [sl, #-908] mov r2, r2, asl #1 ldr r0, [r5, #4] ldr ip, [sp, #16] ldr r3, [sp, #4] str r0, [r1, ip] - ldr r1, .L1264 + ldr r1, .L1301 ldr r1, [r1, #3964] strh r6, [r1, r2] @ movhi - b .L1235 -.L1231: + b .L1272 +.L1268: sub r3, r3, #1 uxth r3, r3 -.L1230: +.L1267: ldr r6, [sp, #4] sxth r2, r3 cmp r2, r6 - bgt .L1236 + bgt .L1273 mov r6, r9 -.L1235: +.L1272: sxth r3, r3 cmp r3, #0 - blt .L1217 - ldr r2, .L1264 + blt .L1254 + ldr r2, .L1301 mov ip, #3936 movw r1, #3962 ldrh ip, [r2, ip] @@ -10466,7 +10895,7 @@ FtlScanSysBlk: rsb ip, r0, ip sxth ip, ip cmp r3, ip - bgt .L1217 + bgt .L1254 add r0, r0, #1 strh r0, [r2, r1] @ movhi ldr r0, [r5, #4] @@ -10474,93 +10903,93 @@ FtlScanSysBlk: str r0, [r1, r3, asl #2] mov r3, r3, asl #1 ldr r2, [r2, #3964] -.L1259: +.L1296: strh r6, [r2, r3] @ movhi - b .L1217 -.L1219: - ldr r3, .L1264+16 + b .L1254 +.L1256: + ldr r3, .L1301+16 movw ip, #65535 ldrh r2, [r4, r3] cmp r2, ip streqh r6, [r4, r3] @ movhi - beq .L1260 - ldr r3, .L1264+20 + beq .L1297 + ldr r3, .L1301+20 movw r1, #65535 ldrh r0, [r4, r3] cmp r0, r1 - beq .L1238 + beq .L1275 mov r1, #1 bl FtlFreeSysBlkQueueIn -.L1238: +.L1275: ldr r3, [r5, #4] ldr r2, [sl, #-1764] cmp r2, r3 - ldr r3, .L1264+20 + ldr r3, .L1301+20 strcsh r6, [r4, r3] @ movhi - bcs .L1217 - ldr r2, .L1264+16 + bcs .L1254 + ldr r2, .L1301+16 ldrh r1, [r4, r2] strh r6, [r4, r2] @ movhi strh r1, [r4, r3] @ movhi -.L1260: +.L1297: ldr r3, [r5, #4] str r3, [r4, #-1764] - b .L1217 -.L1263: + b .L1254 +.L1300: mov r0, r6 - b .L1261 -.L1214: - ldr r3, .L1264 + b .L1298 +.L1251: + ldr r3, .L1301 mov r0, r6 ldrb r1, [r3, #928] @ zero_extendqisi2 cmp r1, #0 - beq .L1240 -.L1261: + beq .L1277 +.L1298: mov r1, #0 -.L1240: +.L1277: bl FtlFreeSysBlkQueueIn -.L1217: +.L1254: ldr r6, [sp, #12] add r8, r8, #36 add r3, r6, #1 uxth r3, r3 str r3, [sp, #12] cmp r3, fp - bne .L1241 -.L1210: + bne .L1278 +.L1247: ldr ip, [sp, #8] add r3, ip, #1 uxth r3, r3 str r3, [sp, #8] -.L1207: - ldr r6, .L1264 +.L1244: + ldr r6, .L1301 movw r3, #3858 ldr ip, [sp, #8] ldrh r3, [r6, r3] cmp r3, ip - bhi .L1255 - ldr r1, .L1264+4 + bhi .L1292 + ldr r1, .L1301+4 ldr r2, [r1, #-1040] ldrh r3, [r2, #0] cmp r3, #0 - bne .L1243 - ldr r0, .L1264+8 + bne .L1280 + ldr r0, .L1301+8 ldrh r1, [r1, r0] cmp r1, #0 ldrne r0, [r6, #3944] - bne .L1244 - b .L1243 -.L1248: + bne .L1281 + b .L1280 +.L1285: mov r1, r1, asl #1 ldrh r1, [r2, r1] cmp r1, #0 - beq .L1245 - ldr r7, .L1264 + beq .L1282 + ldr r7, .L1301 sxth r6, r3 - ldr r1, .L1264+4 + ldr r1, .L1301+4 mov r5, #0 - b .L1246 -.L1247: + b .L1283 +.L1284: ldr ip, [r1, #-1040] mov r0, r2, asl #1 rsb r4, r6, r2 @@ -10574,43 +11003,43 @@ FtlScanSysBlk: str r2, [ip, r4, asl #2] ldr r2, [r1, #-1040] strh r5, [r2, r0] @ movhi -.L1246: +.L1283: ldr r0, [r7, #3944] sxth r2, r3 cmp r2, r0 - bcc .L1247 - b .L1243 -.L1245: + bcc .L1284 + b .L1280 +.L1282: add r3, r3, #1 uxth r3, r3 -.L1244: +.L1281: sxth r1, r3 cmp r1, r0 - bcc .L1248 -.L1243: - ldr r2, .L1264 + bcc .L1285 +.L1280: + ldr r2, .L1301 ldr r1, [r2, #3964] ldrh r3, [r1, #0] cmp r3, #0 - bne .L1249 + bne .L1286 movw r0, #3962 ldrh r0, [r2, r0] cmp r0, #0 movne r0, #3936 ldrneh r2, [r2, r0] - bne .L1250 - b .L1249 -.L1254: + bne .L1287 + b .L1286 +.L1291: mov ip, r0, asl #1 ldrh ip, [r1, ip] cmp ip, #0 - beq .L1251 - ldr r1, .L1264 + beq .L1288 + ldr r1, .L1301 mov r8, #3936 - ldr r7, .L1264+4 + ldr r7, .L1301+4 mov r6, #0 - b .L1252 -.L1253: + b .L1289 +.L1290: ldr r4, [r1, #3964] mov ip, r2, asl #1 rsb r5, r0, r2 @@ -10624,26 +11053,26 @@ FtlScanSysBlk: str r2, [r4, r5, asl #2] ldr r2, [r1, #3964] strh r6, [r2, ip] @ movhi -.L1252: +.L1289: ldrh ip, [r1, r8] sxth r2, r3 cmp r2, ip - blt .L1253 - b .L1249 -.L1251: + blt .L1290 + b .L1286 +.L1288: add r3, r3, #1 uxth r3, r3 -.L1250: +.L1287: sxth r0, r3 cmp r0, r2 - blt .L1254 -.L1249: + blt .L1291 +.L1286: mov r0, #0 add sp, sp, #28 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1265: +.L1302: .align 2 -.L1264: +.L1301: .word .LANCHOR0 .word .LANCHOR2 .word -1044 @@ -10660,7 +11089,7 @@ FtlGetLastWrittenPage: @ args = 0, pretend = 0, frame = 104 @ frame_needed = 0, uses_anonymous_args = 0 cmp r1, #1 - ldr r3, .L1277 + ldr r3, .L1314 stmfd sp!, {r4, r5, r6, r7, r8, sl, lr} .save {r4, r5, r6, r7, r8, sl, lr} movweq r2, #3918 @@ -10686,9 +11115,9 @@ FtlGetLastWrittenPage: bl FlashReadPages ldr r3, [sp, #40] cmn r3, #1 - bne .L1270 - b .L1275 -.L1273: + bne .L1307 + b .L1312 +.L1310: add r6, r6, r3 mov r0, r7 mov r1, #1 @@ -10701,30 +11130,30 @@ FtlGetLastWrittenPage: bl FlashReadPages ldr r3, [sp, #40] cmn r3, #1 - bne .L1271 + bne .L1308 ldr r3, [sp, #44] cmn r3, #1 - bne .L1271 + bne .L1308 ldr r3, [sp, #4] cmn r3, #1 subne r4, r6, #1 uxthne r4, r4 - bne .L1275 -.L1271: + bne .L1312 +.L1308: add r6, r6, #1 uxth r8, r6 -.L1275: +.L1312: sxth r6, r8 sxth r3, r4 cmp r6, r3 - ble .L1273 -.L1270: + ble .L1310 +.L1307: sxth r0, r4 add sp, sp, #108 ldmfd sp!, {r4, r5, r6, r7, r8, sl, pc} -.L1278: +.L1315: .align 2 -.L1277: +.L1314: .word .LANCHOR0 .fnend .size FtlGetLastWrittenPage, .-FtlGetLastWrittenPage @@ -10738,10 +11167,10 @@ FtlLoadSysInfo: stmfd sp!, {r3, r4, r5, r6, r7, lr} .save {r3, r4, r5, r6, r7, lr} mov r5, #0 - ldr r4, .L1295 + ldr r4, .L1332 mov r1, r5 - ldr r2, .L1295+4 - ldr r7, .L1295+8 + ldr r2, .L1332+4 + ldr r7, .L1332+8 ldr r3, [r4, #-936] str r5, [r4, #188] ldr r0, [r4, #-2016] @@ -10753,18 +11182,18 @@ FtlLoadSysInfo: ldrh r0, [r4, r7] movw r3, #65535 cmp r0, r3 - beq .L1293 + beq .L1330 mov r1, #1 bl FtlGetLastWrittenPage - ldr r3, .L1295+12 + ldr r3, .L1332+12 add r2, r0, #1 mov r6, r0 strh r2, [r4, r3] @ movhi - b .L1281 -.L1284: + b .L1318 +.L1321: ldrh r2, [r4, r7] mov r1, #1 - ldr r0, .L1295+16 + ldr r0, .L1332+16 orr r3, r3, r2, asl #10 str r3, [r4, #184] ldr r3, [r4, #-960] @@ -10773,31 +11202,31 @@ FtlLoadSysInfo: bl FlashReadPages ldr r3, [r4, #180] cmn r3, #1 - beq .L1282 + beq .L1319 ldr r3, [r4, #-960] ldr r2, [r3, #0] - ldr r3, .L1295+20 + ldr r3, .L1332+20 cmp r2, r3 - bne .L1282 + bne .L1319 ldr r3, [r4, #-936] ldrh r2, [r3, #0] movw r3, #61604 cmp r2, r3 - beq .L1283 -.L1282: + beq .L1320 +.L1319: sub r5, r5, #1 uxth r5, r5 -.L1281: +.L1318: add r3, r5, r6 sxth r3, r3 cmp r3, #0 - bge .L1284 -.L1283: - ldr r4, .L1295 + bge .L1321 +.L1320: + ldr r4, .L1332 mov r2, #48 - ldr r5, .L1295+4 + ldr r5, .L1332+4 mov r6, #3856 - ldr r0, .L1295+24 + ldr r0, .L1332+24 ldr r7, [r4, #188] mov r1, r7 bl memcpy @@ -10818,7 +11247,7 @@ FtlLoadSysInfo: movw r3, #3960 ldrh r3, [r5, r3] cmp r3, #0 - beq .L1285 + beq .L1322 ldrh r3, [r5, r6] mov r2, #3952 ldrh r2, [r5, r2] @@ -10831,22 +11260,22 @@ FtlLoadSysInfo: ubfx r1, r1, #2, #14 add r1, r3, r1, asl #2 bl memcpy -.L1285: - ldr r4, .L1295 - ldr r3, .L1295+20 +.L1322: + ldr r4, .L1332 + ldr r3, .L1332+20 ldr r2, [r4, #-2072] cmp r2, r3 - bne .L1293 - ldr r3, .L1295+28 + bne .L1330 + ldr r3, .L1332+28 movw r1, #3870 ldrb r0, [r4, #-2062] @ zero_extendqisi2 ldrh r2, [r4, r3] - ldr r3, .L1295+32 + ldr r3, .L1332+32 strh r2, [r4, r3] @ movhi - ldr r3, .L1295+4 + ldr r3, .L1332+4 ldrh r1, [r3, r1] cmp r0, r1 - bne .L1293 + bne .L1330 movw r1, #3916 movw r0, #3922 ldrh r1, [r3, r1] @@ -10865,10 +11294,10 @@ FtlLoadSysInfo: movw r2, #3848 ldrh r1, [r3, r2] bl __aeabi_uidiv - ldr r3, .L1295+36 - ldr r1, .L1295+40 + ldr r3, .L1332+36 + ldr r1, .L1332+40 strh r0, [r4, r3] @ movhi - ldr r3, .L1295+44 + ldr r3, .L1332+44 ldrh r2, [r4, r3] add r3, r3, #62 strh r2, [r4, r3] @ movhi @@ -10880,12 +11309,12 @@ FtlLoadSysInfo: ldrb r3, [r4, #-2061] @ zero_extendqisi2 strh r0, [r4, r1] @ movhi mvn r1, #0 - ldr r0, .L1295+48 + ldr r0, .L1332+48 strb r3, [r4, #-1988] - ldr r3, .L1295+52 + ldr r3, .L1332+52 strh r1, [r4, r3] @ movhi mov r3, #0 - ldr r1, .L1295+56 + ldr r1, .L1332+56 strh r3, [r4, r0] @ movhi strb r3, [r4, #-1754] ldrh r0, [r4, r1] @@ -10894,7 +11323,7 @@ FtlLoadSysInfo: str r3, [r4, #-1816] strh r0, [r4, r1] @ movhi sub r1, r1, #104 - ldr r0, .L1295+60 + ldr r0, .L1332+60 ldrh r1, [r4, r1] mov ip, r1, lsr #6 and r1, r1, #63 @@ -10902,12 +11331,12 @@ FtlLoadSysInfo: ldrb r1, [r4, #-2060] @ zero_extendqisi2 strh ip, [r4, r0] @ movhi strb r1, [r4, #-1940] - ldr r1, .L1295+64 + ldr r1, .L1332+64 ldrh r0, [r4, r1] add r1, r1, #150 strh r0, [r4, r1] @ movhi - ldr r1, .L1295+68 - ldr r0, .L1295+72 + ldr r1, .L1332+68 + ldr r0, .L1332+72 ldrh r1, [r4, r1] mov ip, r1, lsr #6 and r1, r1, #63 @@ -10927,49 +11356,49 @@ FtlLoadSysInfo: ldr r1, [r4, #-1804] cmp r3, r1 strhi r3, [r4, #-1804] - ldr r4, .L1295 + ldr r4, .L1332 ldr r3, [r4, #-2036] ldr r1, [r4, #-1800] cmp r3, r1 strhi r3, [r4, #-1800] cmp r2, r5 - beq .L1288 - ldr r0, .L1295+76 + beq .L1325 + ldr r0, .L1332+76 bl make_superblock -.L1288: - ldr r3, .L1295+80 +.L1325: + ldr r3, .L1332+80 ldrh r3, [r4, r3] cmp r3, r5 - beq .L1289 - ldr r0, .L1295+84 + beq .L1326 + ldr r0, .L1332+84 bl make_superblock -.L1289: - ldr r5, .L1295 +.L1326: + ldr r5, .L1332 movw r4, #65535 - ldr r3, .L1295+88 + ldr r3, .L1332+88 ldrh r3, [r5, r3] cmp r3, r4 - beq .L1290 - ldr r0, .L1295+92 + beq .L1327 + ldr r0, .L1332+92 bl make_superblock -.L1290: - ldr r3, .L1295+52 +.L1327: + ldr r3, .L1332+52 ldrh r3, [r5, r3] cmp r3, r4 - beq .L1294 - ldr r0, .L1295+96 + beq .L1331 + ldr r0, .L1332+96 bl make_superblock mov r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1293: +.L1330: mvn r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1294: +.L1331: mov r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1296: +.L1333: .align 2 -.L1295: +.L1332: .word .LANCHOR2 .word .LANCHOR0 .word -1772 @@ -11006,8 +11435,8 @@ FtlLoadBbt: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, lr} .save {r4, r5, r6, r7, r8, lr} - ldr r6, .L1313 - ldr r8, .L1313+4 + ldr r6, .L1350 + ldr r8, .L1350+4 ldr r3, [r6, #-960] mov r7, r6 ldr r4, [r6, #-936] @@ -11018,33 +11447,33 @@ FtlLoadBbt: ldrh r5, [r8, r3] sub r5, r5, #1 uxth r5, r5 - b .L1298 -.L1302: + b .L1335 +.L1339: mov r1, #1 mov r3, r5, asl #10 - ldr r0, .L1313+8 + ldr r0, .L1350+8 mov r2, r1 str r3, [r6, #184] bl FlashReadPages ldr r3, [r6, #180] cmn r3, #1 - bne .L1299 + bne .L1336 ldr r3, [r6, #184] mov r1, #1 - ldr r0, .L1313+8 + ldr r0, .L1350+8 mov r2, r1 add r3, r3, #1 str r3, [r6, #184] bl FlashReadPages -.L1299: +.L1336: ldr r3, [r7, #180] cmn r3, #1 - beq .L1300 + beq .L1337 ldrh r2, [r4, #0] movw r3, #61649 cmp r2, r3 - bne .L1300 - ldr r3, .L1313+4 + bne .L1337 + ldr r3, .L1350+4 movw r2, #3980 strh r5, [r3, r2] @ movhi ldr r2, [r4, #4] @@ -11052,28 +11481,28 @@ FtlLoadBbt: mov r2, #3984 ldrh r1, [r4, #8] strh r1, [r3, r2] @ movhi - b .L1301 -.L1300: + b .L1338 +.L1337: sub r5, r5, #1 uxth r5, r5 -.L1298: +.L1335: movw r3, #3912 ldrh r3, [r8, r3] sub r3, r3, #48 cmp r5, r3 - bgt .L1302 -.L1301: - ldr r5, .L1313+4 + bgt .L1339 +.L1338: + ldr r5, .L1350+4 movw r8, #3980 movw r3, #65535 ldrh r2, [r5, r8] cmp r2, r3 - beq .L1312 + beq .L1349 mov r6, #3984 ldrh r2, [r5, r6] cmp r2, r3 - beq .L1304 - ldr r7, .L1313 + beq .L1341 + ldr r7, .L1350 mov r1, #1 mov r2, r2, asl #10 add r0, r7, #180 @@ -11082,11 +11511,11 @@ FtlLoadBbt: bl FlashReadPages ldr r3, [r7, #180] cmn r3, #1 - beq .L1304 + beq .L1341 ldrh r2, [r4, #0] movw r3, #61649 cmp r2, r3 - bne .L1304 + bne .L1341 ldr r3, [r4, #4] ldr r2, [r5, #3988] cmp r3, r2 @@ -11095,24 +11524,24 @@ FtlLoadBbt: ldrhih r3, [r4, #8] strhih r2, [r5, r8] @ movhi strhih r3, [r5, r6] @ movhi -.L1304: - ldr r8, .L1313+4 +.L1341: + ldr r8, .L1350+4 movw r3, #3980 mov r1, #1 mov r6, #0 - ldr r5, .L1313 + ldr r5, .L1350 ldrh r0, [r8, r3] bl FtlGetLastWrittenPage movw r3, #3982 add r2, r0, #1 mov r7, r0 strh r2, [r8, r3] @ movhi - b .L1305 -.L1308: + b .L1342 +.L1345: movw r2, #3980 mov r1, #1 ldrh r2, [r8, r2] - ldr r0, .L1313+8 + ldr r0, .L1350+8 orr r3, r3, r2, asl #10 str r3, [r5, #184] ldr r3, [r5, #-960] @@ -11121,48 +11550,48 @@ FtlLoadBbt: bl FlashReadPages ldr r3, [r5, #180] cmn r3, #1 - beq .L1306 + beq .L1343 ldrh r2, [r4, #0] movw r3, #61649 cmp r2, r3 - beq .L1307 -.L1306: + beq .L1344 +.L1343: sub r6, r6, #1 uxth r6, r6 -.L1305: +.L1342: add r3, r6, r7 sxth r3, r3 cmp r3, #0 - bge .L1308 -.L1307: - ldr r3, .L1313+4 + bge .L1345 +.L1344: + ldr r3, .L1350+4 movw r2, #3986 ldrh r1, [r4, #10] ldrh r0, [r4, #12] strh r1, [r3, r2] @ movhi movw r2, #65535 cmp r0, r2 - beq .L1309 + beq .L1346 ldr r2, [r3, #3844] cmp r0, r2 - beq .L1309 + beq .L1346 movw r1, #3858 ldrh r3, [r3, r1] mov r3, r3, lsr #2 cmp r2, r3 - bcs .L1309 + bcs .L1346 cmp r0, r3 - bcs .L1309 + bcs .L1346 bl FtlSysBlkNumInit -.L1309: - ldr r6, .L1313+12 +.L1346: + ldr r6, .L1350+12 mov r4, #0 - ldr r8, .L1313+4 + ldr r8, .L1350+4 movw r7, #3870 - ldr r5, .L1313 - b .L1310 -.L1311: - ldr r3, .L1313+16 + ldr r5, .L1350 + b .L1347 +.L1348: + ldr r3, .L1350+16 ldr r1, [r5, #188] ldr r0, [r6, #4]! ldrh r2, [r5, r3] @@ -11170,18 +11599,18 @@ FtlLoadBbt: mla r1, r4, r2, r1 bl memcpy add r4, r4, #1 -.L1310: +.L1347: ldrh r3, [r8, r7] cmp r4, r3 - bcc .L1311 + bcc .L1348 mov r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L1312: +.L1349: mvn r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L1314: +.L1351: .align 2 -.L1313: +.L1350: .word .LANCHOR2 .word .LANCHOR0 .word .LANCHOR2+180 @@ -11199,59 +11628,59 @@ FtlLoadFactoryBbt: stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r5, #0 - ldr r3, .L1322 + ldr r3, .L1359 movw fp, #3870 - ldr r7, .L1322+4 - ldr r6, .L1322+8 + ldr r7, .L1359+4 + ldr r6, .L1359+8 ldr r2, [r3, #-960] ldr r8, [r3, #-936] str r2, [r3, #188] str r8, [r3, #192] - b .L1316 -.L1321: + b .L1353 +.L1358: movw r9, #3912 mvn r3, #0 ldrh r4, [r6, r9] strh r3, [r7], #2 @ movhi add r4, r4, r3 - ldr sl, .L1322 + ldr sl, .L1359 uxth r4, r4 - b .L1317 -.L1320: + b .L1354 +.L1357: mla r3, r3, r5, r4 mov r1, #1 - ldr r0, .L1322+12 + ldr r0, .L1359+12 mov r2, r1 mov r3, r3, asl #10 str r3, [sl, #184] bl FlashReadPages ldr r3, [sl, #180] cmn r3, #1 - beq .L1318 + beq .L1355 ldrh r2, [r8, #0] movw r3, #61664 cmp r2, r3 streqh r4, [r7, #-2] @ movhi - beq .L1319 -.L1318: + beq .L1356 +.L1355: sub r4, r4, #1 uxth r4, r4 -.L1317: +.L1354: ldrh r3, [r6, r9] sub r2, r3, #16 cmp r4, r2 - bgt .L1320 -.L1319: + bgt .L1357 +.L1356: add r5, r5, #1 -.L1316: +.L1353: ldrh r3, [r6, fp] cmp r5, r3 - bcc .L1321 + bcc .L1358 mov r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1323: +.L1360: .align 2 -.L1322: +.L1359: .word .LANCHOR2 .word .LANCHOR0+3992 .word .LANCHOR0 @@ -11273,13 +11702,13 @@ FlashProgSlc2KPages: mov r9, r2 str r3, [sp, #12] mov r4, r0 - ldr r3, .L1343 + ldr r3, .L1380 mov r6, r0 mov r8, #0 - ldr r7, .L1343+4 + ldr r7, .L1380+4 ldrb fp, [r3, #2901] @ zero_extendqisi2 - b .L1325 -.L1332: + b .L1362 +.L1369: rsb r3, r8, sl add r2, sp, #20 mov r0, r6 @@ -11293,7 +11722,7 @@ FlashProgSlc2KPages: cmp r3, r2 mvncs r3, #0 strcs r3, [r6, #0] - bcs .L1327 + bcs .L1364 add r3, r7, r3 ldrb r5, [r3, #3764] @ zero_extendqisi2 mov r0, r5 @@ -11352,27 +11781,27 @@ FlashProgSlc2KPages: mvnne r3, #0 strne r3, [r6, #0] bl NandcFlashDeCs -.L1327: +.L1364: add r8, r8, #1 add r6, r6, #36 -.L1325: +.L1362: cmp r8, sl - bne .L1332 + bne .L1369 ldr r3, [sp, #12] cmp r3, #0 movne r6, #0 - ldrne r5, .L1343+8 - bne .L1333 - b .L1334 -.L1339: + ldrne r5, .L1380+8 + bne .L1370 + b .L1371 +.L1376: ldr r3, [r4, #0] cmn r3, #1 - bne .L1335 + bne .L1372 ldr r1, [r4, #4] - ldr r0, .L1343+12 + ldr r0, .L1380+12 bl printk - b .L1336 -.L1335: + b .L1373 +.L1372: rsb r3, r6, sl mov r1, r9 add r2, sp, #20 @@ -11404,59 +11833,59 @@ FlashProgSlc2KPages: bl FlashReadPages ldr r7, [sp, #28] cmn r7, #1 - bne .L1337 - ldr r0, .L1343+16 + bne .L1374 + ldr r0, .L1380+16 ldr r1, [r4, #4] bl printk str r7, [r4, #0] -.L1337: +.L1374: ldr r3, [r4, #12] cmp r3, #0 - beq .L1338 + beq .L1375 ldr r2, [r3, #0] ldr r3, [r5, #224] ldr r3, [r3, #0] cmp r2, r3 - beq .L1338 - ldr r0, .L1343+20 + beq .L1375 + ldr r0, .L1380+20 ldr r1, [r4, #4] bl printk mvn r3, #0 str r3, [r4, #0] -.L1338: +.L1375: ldr r3, [r4, #8] cmp r3, #0 - beq .L1336 + beq .L1373 ldr r2, [r3, #0] ldr r3, [r5, #220] ldr r3, [r3, #0] cmp r2, r3 - beq .L1336 - ldr r0, .L1343+24 + beq .L1373 + ldr r0, .L1380+24 ldr r1, [r4, #4] bl printk mvn r3, #0 str r3, [r4, #0] -.L1336: +.L1373: add r6, r6, #1 add r4, r4, #36 -.L1333: +.L1370: cmp r6, sl - bne .L1339 -.L1334: + bne .L1376 +.L1371: mov r0, #0 add sp, sp, #68 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1344: +.L1381: .align 2 -.L1343: +.L1380: .word .LANCHOR1 .word .LANCHOR0 .word .LANCHOR2 - .word .LC101 - .word .LC102 - .word .LC103 - .word .LC104 + .word .LC108 + .word .LC109 + .word .LC110 + .word .LC111 .fnend .size FlashProgSlc2KPages, .-FlashProgSlc2KPages .align 2 @@ -11470,7 +11899,7 @@ FlashProgPages: .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} .pad #76 sub sp, sp, #76 - ldr r5, .L1373 + ldr r5, .L1410 mov r9, r0 str r1, [sp, #8] mov sl, r2 @@ -11481,13 +11910,13 @@ FlashProgPages: cmp r6, #0 moveq fp, r5 str ip, [sp, #20] - ldr ip, .L1373+4 + ldr ip, .L1410+4 ldrb ip, [ip, #2901] @ zero_extendqisi2 str ip, [sp, #12] - beq .L1346 + beq .L1383 bl FlashProgSlc2KPages - b .L1347 -.L1360: + b .L1384 +.L1397: mov r4, #36 ldr r2, [sp, #8] mul r4, r4, r6 @@ -11506,22 +11935,22 @@ FlashProgPages: mvncs r3, #0 strcs r3, [r9, r4] mov r8, r0 - bcs .L1349 + bcs .L1386 ldrb r1, [r5, #3837] @ zero_extendqisi2 add r2, fp, r2, asl #4 cmp r1, #0 ldr r2, [r2, #3636] moveq r8, #0 cmp r2, #0 - beq .L1351 + beq .L1388 cmp r3, #1 - bne .L1352 + bne .L1389 ldr r0, [r5, #3012] bl NandcIqrWaitFlashReady -.L1352: +.L1389: ldrb r0, [sp, #32] @ zero_extendqisi2 bl FlashWaitCmdDone -.L1351: +.L1388: ldr r2, [sp, #32] mov r1, #0 cmp r8, #0 @@ -11541,10 +11970,10 @@ FlashProgPages: cmp r3, #1 strb r4, [r2, #3628] mov r0, r4 - bne .L1354 + bne .L1391 bl NandcWaitFlashReady - b .L1355 -.L1354: + b .L1392 +.L1391: bl NandcFlashCs ldr r3, [sp, #32] mov r0, r4 @@ -11556,34 +11985,34 @@ FlashProgPages: bl FlashWaitReadyEN mov r0, r4 bl NandcFlashDeCs -.L1355: +.L1392: ldr r2, [sp, #20] sub r3, r2, #1 cmp r3, #6 - bhi .L1356 + bhi .L1393 add r3, r5, r4 ldrb r3, [r3, #3756] @ zero_extendqisi2 cmp r3, #0 - beq .L1356 + beq .L1393 mov r0, r4 ldrb r1, [r5, #1] @ zero_extendqisi2 - ldr r2, .L1373+8 + ldr r2, .L1410+8 mov r3, #0 bl HynixSetRRPara -.L1356: +.L1393: mov r0, r4 bl NandcFlashCs cmp sl, #1 mov r0, r4 - bne .L1357 + bne .L1394 ldrb r3, [r5, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L1357 + beq .L1394 bl flash_enter_slc_mode - b .L1358 -.L1357: + b .L1395 +.L1394: bl flash_exit_slc_mode -.L1358: +.L1395: mov r0, r4 ldr r1, [sp, #28] bl FlashProgFirstCmd @@ -11595,7 +12024,7 @@ FlashProgPages: ldr r3, [r7, #8] bl NandcXferData cmp r8, #0 - beq .L1359 + beq .L1396 mov r0, r4 ldr r1, [sp, #28] bl FlashProgDpFirstCmd @@ -11622,58 +12051,58 @@ FlashProgPages: ldr r2, [sp, #12] ldr r3, [r3, #8] bl NandcXferData -.L1359: +.L1396: mov r0, r4 ldr r1, [sp, #28] bl FlashProgSecondCmd mov r0, r4 bl NandcFlashDeCs add r6, r6, r8 -.L1349: +.L1386: add r6, r6, #1 -.L1346: +.L1383: ldr r3, [sp, #8] cmp r6, r3 - bcc .L1360 - ldr r5, .L1373 + bcc .L1397 + ldr r5, .L1410 mov r4, #0 - ldr r6, .L1373+12 + ldr r6, .L1410+12 ldr r0, [r5, #3012] bl NandcIqrWaitFlashReady - b .L1361 -.L1363: + b .L1398 +.L1400: uxtb r0, r4 bl FlashWaitCmdDone cmp sl, #1 - bne .L1362 + bne .L1399 ldrb r3, [r5, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L1362 + beq .L1399 ldrb r0, [r6, r4, asl #4] @ zero_extendqisi2 bl flash_exit_slc_mode -.L1362: +.L1399: add r4, r4, #1 -.L1361: +.L1398: ldrb r3, [r5, #3762] @ zero_extendqisi2 cmp r4, r3 - bcc .L1363 + bcc .L1400 ldr r2, [sp, #16] cmp r2, #0 ldreq r0, [sp, #16] - beq .L1347 + beq .L1384 mov r5, #0 - ldr r4, .L1373+16 + ldr r4, .L1410+16 ldr r6, [sp, #8] - b .L1364 -.L1369: + b .L1401 +.L1406: ldr r3, [r9, #0] cmn r3, #1 - bne .L1365 + bne .L1402 ldr r1, [r9, #4] - ldr r0, .L1373+20 + ldr r0, .L1410+20 bl printk - b .L1366 -.L1365: + b .L1403 +.L1402: rsb r3, r5, r6 mov r1, sl add r2, sp, #28 @@ -11705,101 +12134,101 @@ FlashProgPages: bl FlashReadPages ldr r7, [sp, #36] cmn r7, #1 - bne .L1367 - ldr r0, .L1373+24 + bne .L1404 + ldr r0, .L1410+24 ldr r1, [r9, #4] bl printk str r7, [r9, #0] -.L1367: +.L1404: ldr r3, [r9, #12] cmp r3, #0 - beq .L1368 + beq .L1405 ldr r2, [r3, #0] ldr r3, [r4, #224] ldr r3, [r3, #0] cmp r2, r3 - beq .L1368 - ldr r0, .L1373+28 + beq .L1405 + ldr r0, .L1410+28 ldr r1, [r9, #4] bl printk mvn r3, #0 str r3, [r9, #0] -.L1368: +.L1405: ldr r3, [r9, #8] cmp r3, #0 - beq .L1366 + beq .L1403 ldr r2, [r3, #0] ldr r3, [r4, #220] ldr r3, [r3, #0] cmp r2, r3 - beq .L1366 - ldr r0, .L1373+32 + beq .L1403 + ldr r0, .L1410+32 ldr r1, [r9, #4] bl printk mvn r3, #0 str r3, [r9, #0] -.L1366: +.L1403: add r5, r5, #1 add r9, r9, #36 -.L1364: +.L1401: cmp r5, r6 - bne .L1369 + bne .L1406 mov r0, #0 -.L1347: +.L1384: add sp, sp, #76 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1374: +.L1411: .align 2 -.L1373: +.L1410: .word .LANCHOR0 .word .LANCHOR1 .word .LANCHOR0+4 .word .LANCHOR0+3628 .word .LANCHOR2 - .word .LC101 - .word .LC102 - .word .LC103 - .word .LC104 + .word .LC108 + .word .LC109 + .word .LC110 + .word .LC111 .fnend .size FlashProgPages, .-FlashProgPages .align 2 - .type FtlVpcTblFlush.part.13, %function -FtlVpcTblFlush.part.13: + .type FtlVpcTblFlush.part.14, %function +FtlVpcTblFlush.part.14: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} .save {r3, r4, r5, r6, r7, r8, sl, lr} mov r1, #255 - ldr r4, .L1387 + ldr r4, .L1424 mov r7, #3856 - ldr r6, .L1387+4 + ldr r6, .L1424+4 ldr r3, [r4, #-960] ldr r5, [r4, #-936] str r3, [r4, #188] - ldr r3, .L1387+8 + ldr r3, .L1424+8 str r5, [r4, #192] ldrh r3, [r4, r3] strh r3, [r5, #2] @ movhi - ldr r3, .L1387+12 + ldr r3, .L1424+12 strh r3, [r5, #0] @ movhi ldr r3, [r4, #-1764] str r3, [r5, #4] mov r3, #0 str r3, [r5, #8] str r3, [r5, #12] - ldr r3, .L1387+16 + ldr r3, .L1424+16 str r3, [r4, #-2072] - ldr r3, .L1387+20 + ldr r3, .L1424+20 str r3, [r4, #-2068] - ldr r3, .L1387+24 + ldr r3, .L1424+24 ldrh r2, [r4, r3] - ldr r3, .L1387+28 + ldr r3, .L1424+28 strh r2, [r4, r3] @ movhi movw r3, #3870 ldrh r3, [r6, r3] strb r3, [r4, #-2062] - ldr r3, .L1387+32 + ldr r3, .L1424+32 ldrh r2, [r4, r3] sub r3, r3, #62 strh r2, [r4, r3] @ movhi @@ -11807,11 +12236,11 @@ FtlVpcTblFlush.part.13: ldrh r2, [r4, r3] ldrb r3, [r4, #-1990] @ zero_extendqisi2 orr r2, r3, r2, asl #6 - ldr r3, .L1387+36 + ldr r3, .L1424+36 strh r2, [r4, r3] @ movhi ldrb r3, [r4, #-1988] @ zero_extendqisi2 strb r3, [r4, #-2061] - ldr r3, .L1387+40 + ldr r3, .L1424+40 ldrh r2, [r4, r3] sub r3, r3, #106 strh r2, [r4, r3] @ movhi @@ -11819,11 +12248,11 @@ FtlVpcTblFlush.part.13: ldrh r2, [r4, r3] ldrb r3, [r4, #-1942] @ zero_extendqisi2 orr r2, r3, r2, asl #6 - ldr r3, .L1387+44 + ldr r3, .L1424+44 strh r2, [r4, r3] @ movhi ldrb r3, [r4, #-1940] @ zero_extendqisi2 strb r3, [r4, #-2060] - ldr r3, .L1387+48 + ldr r3, .L1424+48 ldrh r2, [r4, r3] sub r3, r3, #150 strh r2, [r4, r3] @ movhi @@ -11832,7 +12261,7 @@ FtlVpcTblFlush.part.13: ldrh r2, [r4, r3] ldrb r3, [r4, #-1894] @ zero_extendqisi2 orr r2, r3, r2, asl #6 - ldr r3, .L1387+52 + ldr r3, .L1424+52 strh r2, [r4, r3] @ movhi ldrb r3, [r4, #-1892] @ zero_extendqisi2 strb r3, [r4, #-2059] @@ -11845,7 +12274,7 @@ FtlVpcTblFlush.part.13: movw r3, #3926 ldrh r2, [r6, r3] bl ftl_memset - ldr r1, .L1387+56 + ldr r1, .L1424+56 mov r2, #48 ldr r0, [r4, #188] bl memcpy @@ -11867,7 +12296,7 @@ FtlVpcTblFlush.part.13: movw r3, #3960 ldrh r3, [r6, r3] cmp r3, #0 - beq .L1376 + beq .L1413 ldrh r3, [r6, r7] ldr r1, [r4, #188] mov r0, r3, lsr #3 @@ -11880,21 +12309,21 @@ FtlVpcTblFlush.part.13: add r0, r1, r0, asl #2 ldr r1, [r4, #-1032] bl memcpy -.L1376: +.L1413: mov r0, #0 - ldr r4, .L1387 + ldr r4, .L1424 bl FtlUpdateVaildLpn - ldr r8, .L1387+8 + ldr r8, .L1424+8 mov r6, #0 movw sl, #65535 -.L1386: +.L1423: ldr r3, [r4, #-960] mov r1, #1 - ldr r7, .L1387+60 + ldr r7, .L1424+60 ldrh r2, [r4, r8] str r3, [r4, #188] ldr r3, [r4, #-936] - ldr r0, .L1387+64 + ldr r0, .L1424+64 str r3, [r4, #192] ldrh r3, [r4, r7] orr r3, r3, r2, asl #10 @@ -11902,14 +12331,14 @@ FtlVpcTblFlush.part.13: str r3, [r4, #184] mov r3, r1 bl FlashProgPages - ldr r1, .L1387+4 + ldr r1, .L1424+4 movw r3, #3918 ldrh r2, [r4, r7] ldrh r3, [r1, r3] sub r3, r3, #1 cmp r2, r3 - blt .L1378 - ldr r3, .L1387+68 + blt .L1415 + ldr r3, .L1424+68 ldrh r2, [r4, r8] ldrh sl, [r4, r3] strh r2, [r4, r3] @ movhi @@ -11928,40 +12357,41 @@ FtlVpcTblFlush.part.13: str r3, [r5, #4] mov r3, r1 strh r0, [r5, #2] @ movhi - ldr r0, .L1387+64 + ldr r0, .L1424+64 bl FlashProgPages -.L1378: - ldr r2, .L1387+60 +.L1415: + ldr r2, .L1424+60 ldr r1, [r4, #180] ldrh r3, [r4, r2] cmn r1, #1 add r3, r3, #1 uxth r3, r3 strh r3, [r4, r2] @ movhi - bne .L1379 + bne .L1416 cmp r3, #1 add r6, r6, #1 - ldreq r1, .L1387+4 + ldreq r1, .L1424+4 movweq r3, #3918 uxth r6, r6 ldreqh r3, [r1, r3] subeq r3, r3, #1 streqh r3, [r4, r2] @ movhi cmp r6, #3 - bls .L1386 - ldr r4, .L1387 + bls .L1423 + ldr r3, .L1424 mov r2, r6 - ldr r0, .L1387+72 - ldr r1, [r4, #184] + ldr r0, .L1424+72 + ldr r1, [r3, #184] bl printk - mov r3, #1 - str r3, [r4, #-2088] + ldr r3, .L1424+4 + mov r2, #1 + str r2, [r3, #4040] ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L1379: +.L1416: cmp r3, #1 - beq .L1386 + beq .L1423 cmp r1, #256 - beq .L1386 + beq .L1423 movw r3, #65535 cmp sl, r3 ldmeqfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} @@ -11969,9 +12399,9 @@ FtlVpcTblFlush.part.13: mov r1, #1 bl FtlFreeSysBlkQueueIn ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L1388: +.L1425: .align 2 -.L1387: +.L1424: .word .LANCHOR2 .word .LANCHOR0 .word -1772 @@ -11990,9 +12420,9 @@ FtlVpcTblFlush.part.13: .word -1770 .word .LANCHOR2+180 .word -1768 - .word .LC105 + .word .LC112 .fnend - .size FtlVpcTblFlush.part.13, .-FtlVpcTblFlush.part.13 + .size FtlVpcTblFlush.part.14, .-FtlVpcTblFlush.part.14 .align 2 .global FtlVpcTblFlush .type FtlVpcTblFlush, %function @@ -12002,18 +12432,18 @@ FtlVpcTblFlush: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, lr} .save {r3, lr} - ldr r3, .L1391 - ldr r3, [r3, #-2088] + ldr r3, .L1428 + ldr r3, [r3, #4040] cmp r3, #0 - bne .L1390 - bl FtlVpcTblFlush.part.13 -.L1390: + bne .L1427 + bl FtlVpcTblFlush.part.14 +.L1427: mov r0, #0 ldmfd sp!, {r3, pc} -.L1392: +.L1429: .align 2 -.L1391: - .word .LANCHOR2 +.L1428: + .word .LANCHOR0 .fnend .size FtlVpcTblFlush, .-FtlVpcTblFlush .section .text.unlikely,"ax",%progbits @@ -12026,11 +12456,11 @@ FtlBbmTblFlush.part.16: stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r1, #0 - ldr r7, .L1406 - mov r6, #0 - ldr sl, .L1406+4 + ldr r7, .L1443 + mov r5, #0 + ldr sl, .L1443+4 movw r9, #3870 - ldr r8, .L1406+8 + ldr r8, .L1443+8 ldr r3, [r7, #-936] ldr r0, [r7, #-960] str r3, [r7, #192] @@ -12038,143 +12468,143 @@ FtlBbmTblFlush.part.16: str r0, [r7, #188] ldrh r2, [sl, r3] bl ftl_memset - b .L1394 -.L1395: - ldr r3, .L1406+12 + b .L1431 +.L1432: + ldr r3, .L1443+12 ldr r1, [r8, #4]! ldrh r2, [r7, r3] ldr r3, [r7, #188] - mul r0, r2, r6 + mul r0, r2, r5 mov r2, r2, asl #2 - add r6, r6, #1 + add r5, r5, #1 add r0, r3, r0, asl #2 bl memcpy -.L1394: +.L1431: ldrh r3, [sl, r9] - ldr r4, .L1406+4 - cmp r6, r3 - ldr r5, .L1406 - blt .L1395 - ldr r6, [r5, #192] + ldr r4, .L1443+4 + cmp r5, r3 + ldr r6, .L1443 + blt .L1432 + ldr r5, [r6, #192] mov r1, #255 mov r2, #16 mov r7, #0 mov fp, r7 - mov r0, r6 + mov r0, r5 bl ftl_memset - ldr r3, .L1406+16 - strh r3, [r6, #0] @ movhi + ldr r3, .L1443+16 + strh r3, [r5, #0] @ movhi ldr r3, [r4, #3988] - str r3, [r6, #4] + str r3, [r5, #4] movw r3, #3980 ldrh r3, [r4, r3] - strh r3, [r6, #2] @ movhi + strh r3, [r5, #2] @ movhi mov r3, #3984 ldrh r3, [r4, r3] - strh r3, [r6, #8] @ movhi + strh r3, [r5, #8] @ movhi movw r3, #3986 ldrh r3, [r4, r3] - strh r3, [r6, #10] @ movhi + strh r3, [r5, #10] @ movhi ldr r3, [r4, #3844] - strh r3, [r6, #12] @ movhi - b .L1404 -.L1401: + strh r3, [r5, #12] @ movhi + b .L1441 +.L1438: mov fp, #1 -.L1404: - ldr r3, [r5, #-960] +.L1441: + ldr r3, [r6, #-960] movw r8, #3980 - ldr r4, .L1406+4 + ldr r4, .L1443+4 mov r1, #0 movw sl, #3982 - str r1, [r5, #180] - str r3, [r5, #188] + str r1, [r6, #180] + str r3, [r6, #188] mov r9, #3984 - ldr r3, [r5, #-936] + ldr r3, [r6, #-936] ldrh r1, [r4, r8] ldrh r2, [r4, sl] - str r3, [r5, #192] - ldrh r0, [r6, #10] + str r3, [r6, #192] + ldrh r0, [r5, #10] orr r3, r2, r1, asl #10 - str r3, [r5, #184] + str r3, [r6, #184] ldrh r3, [r4, r9] str r0, [sp, #0] - ldr r0, .L1406+20 + ldr r0, .L1443+20 bl printk mov r1, #1 mov r2, r1 mov r3, r1 - ldr r0, .L1406+24 + ldr r0, .L1443+24 bl FlashProgPages movw r3, #3918 ldrh r3, [r4, r3] ldrh r2, [r4, sl] sub r3, r3, #1 cmp r2, r3 - blt .L1397 + blt .L1434 ldr r3, [r4, #3988] mov r1, #0 @ movhi ldrh r2, [r4, r8] add r3, r3, #1 - ldr r0, [r5, #-2084] + ldr r0, [r4, #4044] str r3, [r4, #3988] - str r3, [r6, #4] + str r3, [r5, #4] ldrh r3, [r4, r9] strh r1, [r4, sl] @ movhi mov r1, #1 - strh r2, [r6, #8] @ movhi + strh r2, [r5, #8] @ movhi strh r2, [r4, r9] @ movhi mov r2, r1 strh r3, [r4, r8] @ movhi mov r3, r3, asl #10 - str r3, [r5, #184] + str r3, [r6, #184] str r3, [r0, #4] bl FlashEraseBlocks mov r1, #1 - ldr r0, .L1406+24 + ldr r0, .L1443+24 mov r2, r1 mov r3, r1 bl FlashProgPages -.L1397: - ldr r2, .L1406+4 +.L1434: + ldr r4, .L1443+4 movw r3, #3982 - ldr r4, .L1406 - ldrh r1, [r2, r3] - add r1, r1, #1 - strh r1, [r2, r3] @ movhi - ldr r3, [r5, #180] + ldrh r2, [r4, r3] + add r2, r2, #1 + strh r2, [r4, r3] @ movhi + ldr r3, [r6, #180] cmn r3, #1 - bne .L1398 + bne .L1435 add r7, r7, #1 - ldr r0, .L1406+28 - ldr r1, [r5, #184] + ldr r0, .L1443+28 + ldr r1, [r6, #184] uxth r7, r7 bl printk cmp r7, #3 - bls .L1404 - ldr r0, .L1406+32 + bls .L1441 + ldr r3, .L1443 mov r2, r7 - ldr r1, [r4, #184] + ldr r0, .L1443+32 + ldr r1, [r3, #184] bl printk mov r3, #1 - str r3, [r4, #-2088] - b .L1405 -.L1398: + str r3, [r4, #4040] + b .L1442 +.L1435: cmp fp, #0 - beq .L1401 -.L1405: + beq .L1438 +.L1442: ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1407: +.L1444: .align 2 -.L1406: +.L1443: .word .LANCHOR2 .word .LANCHOR0 .word .LANCHOR0+4004 .word -1028 .word -3887 - .word .LC106 + .word .LC113 .word .LANCHOR2+180 - .word .LC107 - .word .LC108 + .word .LC114 + .word .LC115 .fnend .size FtlBbmTblFlush.part.16, .-FtlBbmTblFlush.part.16 .text @@ -12187,18 +12617,18 @@ FtlBbmTblFlush: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, lr} .save {r3, lr} - ldr r3, .L1410 - ldr r3, [r3, #-2088] + ldr r3, .L1447 + ldr r3, [r3, #4040] cmp r3, #0 - bne .L1409 + bne .L1446 bl FtlBbmTblFlush.part.16 -.L1409: +.L1446: mov r0, #0 ldmfd sp!, {r3, pc} -.L1411: +.L1448: .align 2 -.L1410: - .word .LANCHOR2 +.L1447: + .word .LANCHOR0 .fnend .size FtlBbmTblFlush, .-FtlBbmTblFlush .align 2 @@ -12211,39 +12641,39 @@ FtlGcFreeBadSuperBlk: stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} .save {r4, r5, r6, r7, r8, r9, sl, lr} mov r9, r0 - ldr r4, .L1422 - ldr r3, .L1422+4 + ldr r4, .L1459 + ldr r3, .L1459+4 ldrh r3, [r4, r3] cmp r3, #0 movne r6, #0 movne sl, r4 - bne .L1413 - b .L1414 -.L1420: + bne .L1450 + b .L1451 +.L1457: add r3, r3, r6 mov r1, r9 mov r5, #0 - ldr r7, .L1422+4 + ldr r7, .L1459+4 ldrb r0, [r3, #3874] @ zero_extendqisi2 bl V2P_block mov r8, r0 - b .L1415 -.L1419: + b .L1452 +.L1456: add r3, r4, r5, asl #1 sub r3, r3, #1136 ldrh r3, [r3, #0] cmp r3, r8 - bne .L1416 + bne .L1453 mov r1, r8 - ldr r0, .L1422+8 + ldr r0, .L1459+8 bl printk mov r0, r8 bl FtlBbmMapBadBlock bl FtlBbmTblFlush ldrh r2, [r4, r7] mov r3, r5 - b .L1417 -.L1418: + b .L1454 +.L1455: add r1, r3, #1 add r3, r4, r3, asl #1 sub r3, r3, #1136 @@ -12252,36 +12682,36 @@ FtlGcFreeBadSuperBlk: ldrh r0, [r0, #0] strh r0, [r3, #0] @ movhi uxth r3, r1 -.L1417: +.L1454: cmp r3, r2 - bcc .L1418 + bcc .L1455 sub r2, r2, #1 strh r2, [sl, r7] @ movhi -.L1416: +.L1453: add r5, r5, #1 uxth r5, r5 -.L1415: +.L1452: ldrh r3, [r4, r7] cmp r3, r5 - bhi .L1419 + bhi .L1456 add r6, r6, #1 uxth r6, r6 -.L1413: - ldr r3, .L1422+12 +.L1450: + ldr r3, .L1459+12 movw r2, #3848 ldrh r2, [r3, r2] cmp r2, r6 - bhi .L1420 + bhi .L1457 bl FtlGcReFreshBadBlk -.L1414: +.L1451: mov r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L1423: +.L1460: .align 2 -.L1422: +.L1459: .word .LANCHOR2 .word -1138 - .word .LC109 + .word .LC116 .word .LANCHOR0 .fnend .size FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk @@ -12295,36 +12725,36 @@ update_vpc_list: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r2, r0, asl #1 - ldr r3, .L1432 + ldr r3, .L1469 mov r4, r0 ldr r1, [r3, #-2016] ldrh r2, [r1, r2] cmp r2, #0 - bne .L1425 - ldr r1, .L1432+4 + bne .L1462 + ldr r1, .L1469+4 ldrh r0, [r3, r1] cmp r0, r4 mvneq r2, #0 streqh r2, [r3, r1] @ movhi - beq .L1427 - ldr r1, .L1432+8 + beq .L1464 + ldr r1, .L1469+8 ldrh r1, [r3, r1] cmp r1, r4 - beq .L1428 - ldr r1, .L1432+12 + beq .L1465 + ldr r1, .L1469+12 ldrh r1, [r3, r1] cmp r1, r4 - beq .L1428 - ldr r1, .L1432+16 + beq .L1465 + ldr r1, .L1469+16 ldrh r3, [r3, r1] cmp r3, r4 - beq .L1428 -.L1427: + beq .L1465 +.L1464: mov r1, r4 - ldr r0, .L1432+20 + ldr r0, .L1469+20 bl List_remove_node - ldr r5, .L1432 - ldr r3, .L1432+24 + ldr r5, .L1469 + ldr r3, .L1469+24 mov r0, r4 ldrh r2, [r5, r3] sub r2, r2, #1 @@ -12333,16 +12763,16 @@ update_vpc_list: mov r0, r4 bl FtlGcFreeBadSuperBlk mov r2, #1 - b .L1428 -.L1425: + b .L1465 +.L1462: bl List_update_data_list mov r2, #0 -.L1428: +.L1465: mov r0, r2 ldmfd sp!, {r3, r4, r5, pc} -.L1433: +.L1470: .align 2 -.L1432: +.L1469: .word .LANCHOR2 .word -1760 .word -1996 @@ -12364,45 +12794,45 @@ decrement_vpc_count: movw r3, #65535 cmp r0, r3 mov r5, r0 - beq .L1435 - ldr r2, .L1440 + beq .L1472 + ldr r2, .L1477 mov r3, r0, asl #1 ldr r2, [r2, #-2016] ldrh r4, [r2, r3] cmp r4, #0 subne r4, r4, #1 strneh r4, [r2, r3] @ movhi - bne .L1435 - ldr r0, .L1440+4 + bne .L1472 + ldr r0, .L1477+4 mov r1, r5 mov r2, r4 bl printk mov r0, r4 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1435: - ldr r7, .L1440 +.L1472: + ldr r7, .L1477 movw r3, #65535 - ldr r6, .L1440+8 + ldr r6, .L1477+8 ldrh r0, [r7, r6] cmp r0, r3 streqh r5, [r7, r6] @ movhi moveq r0, #0 ldmeqfd sp!, {r3, r4, r5, r6, r7, pc} cmp r0, r5 - beq .L1439 + beq .L1476 bl update_vpc_list strh r5, [r7, r6] @ movhi adds r0, r0, #0 movne r0, #1 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1439: +.L1476: mov r0, #0 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1441: +.L1478: .align 2 -.L1440: +.L1477: .word .LANCHOR2 - .word .LC110 + .word .LC117 .word -1020 .fnend .size decrement_vpc_count, .-decrement_vpc_count @@ -12420,12 +12850,12 @@ get_new_active_ppa: mov r4, r0 ldrb r3, [r0, #6] @ zero_extendqisi2 movw r6, #65535 - ldr r5, .L1454 - ldr r7, .L1454+4 + ldr r5, .L1491 + ldr r7, .L1491+4 add r3, r0, r3, asl #1 ldrh r3, [r3, #16] - b .L1443 -.L1444: + b .L1480 +.L1481: ldrb r3, [r4, #6] @ zero_extendqisi2 movw r2, #3848 ldrh r2, [r5, r2] @@ -12441,28 +12871,28 @@ get_new_active_ppa: ldrb r3, [r4, #6] @ zero_extendqisi2 add r3, r4, r3, asl #1 ldrh r3, [r3, #16] -.L1443: +.L1480: cmp r3, r6 - beq .L1444 + beq .L1481 ldrb r2, [r4, #8] @ zero_extendqisi2 cmp r2, #1 - bne .L1446 + bne .L1483 ldrb r2, [r5, #928] @ zero_extendqisi2 cmp r2, #0 - bne .L1446 + bne .L1483 ldrh r2, [r4, #2] add r2, r7, r2, asl #1 sub r2, r2, #892 ldrh r2, [r2, #0] cmp r2, r6 - bne .L1446 + bne .L1483 ldrh r3, [r4, #4] ldrh r0, [r4, #0] sub r3, r3, #1 strh r3, [r4, #4] @ movhi bl decrement_vpc_count - b .L1444 -.L1446: + b .L1481 +.L1483: ldrh r6, [r4, #2] movw r5, #65535 mov r7, r5 @@ -12470,12 +12900,12 @@ get_new_active_ppa: ldrh r3, [r4, #4] sub r3, r3, #1 strh r3, [r4, #4] @ movhi -.L1451: - ldr r2, .L1454 +.L1488: + ldr r2, .L1491 movw r3, #3848 ldrh r2, [r2, r3] ldrb r3, [r4, #6] @ zero_extendqisi2 -.L1448: +.L1485: add r3, r3, #1 uxtb r3, r3 cmp r3, r2 @@ -12486,36 +12916,36 @@ get_new_active_ppa: add r1, r4, r3, asl #1 ldrh r1, [r1, #16] cmp r1, r5 - beq .L1448 + beq .L1485 strb r3, [r4, #6] ldrb r3, [r4, #8] @ zero_extendqisi2 cmp r3, #1 - bne .L1449 - ldr r3, .L1454 + bne .L1486 + ldr r3, .L1491 ldrb r2, [r3, #928] @ zero_extendqisi2 cmp r2, #0 ldrh r2, [r4, #2] - bne .L1452 - ldr r3, .L1454+4 + bne .L1489 + ldr r3, .L1491+4 add r2, r3, r2, asl #1 sub r2, r2, #892 ldrh r3, [r2, #0] cmp r3, r7 - bne .L1449 + bne .L1486 ldrh r3, [r4, #4] cmp r3, #0 - beq .L1449 + beq .L1486 sub r3, r3, #1 ldrh r0, [r4, #0] strh r3, [r4, #4] @ movhi bl decrement_vpc_count - b .L1451 -.L1452: + b .L1488 +.L1489: movw r1, #3918 ldrh r1, [r3, r1] cmp r2, r1 - bcc .L1449 - ldr r1, .L1454+4 + bcc .L1486 + ldr r1, .L1491+4 ldrh r2, [r4, #0] ldrh r0, [r4, #4] ldr r1, [r1, #-2016] @@ -12530,19 +12960,19 @@ get_new_active_ppa: ldrh r3, [r3, r2] strb r1, [r4, #6] strh r3, [r4, #2] @ movhi -.L1449: +.L1486: mov r0, r6 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1455: +.L1492: .align 2 -.L1454: +.L1491: .word .LANCHOR0 .word .LANCHOR2 .fnend .size get_new_active_ppa, .-get_new_active_ppa .align 2 - .type FtlSlcSuperblockCheck.part.19, %function -FtlSlcSuperblockCheck.part.19: + .type FtlSlcSuperblockCheck.part.20, %function +FtlSlcSuperblockCheck.part.20: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @@ -12551,12 +12981,12 @@ FtlSlcSuperblockCheck.part.19: mov r4, r0 ldrb r3, [r0, #6] @ zero_extendqisi2 movw r6, #65535 - ldr r5, .L1462 - ldr r7, .L1462+4 + ldr r5, .L1499 + ldr r7, .L1499+4 add r3, r0, r3, asl #1 ldrh r3, [r3, #16] - b .L1457 -.L1458: + b .L1494 +.L1495: ldrb r3, [r4, #6] @ zero_extendqisi2 movw r2, #3848 ldrh r2, [r5, r2] @@ -12572,21 +13002,21 @@ FtlSlcSuperblockCheck.part.19: ldrb r3, [r4, #6] @ zero_extendqisi2 add r3, r4, r3, asl #1 ldrh r3, [r3, #16] -.L1457: +.L1494: cmp r3, r6 - beq .L1458 + beq .L1495 ldrb r2, [r4, #8] @ zero_extendqisi2 cmp r2, #1 - bne .L1460 + bne .L1497 ldrb r3, [r5, #928] @ zero_extendqisi2 cmp r3, #0 - bne .L1460 + bne .L1497 ldrh r3, [r4, #2] add r3, r7, r3, asl #1 sub r3, r3, #892 ldrh r3, [r3, #0] cmp r3, r6 - bne .L1460 + bne .L1497 ldrh r3, [r4, #4] ldrh r0, [r4, #0] sub r3, r3, #1 @@ -12594,14 +13024,14 @@ FtlSlcSuperblockCheck.part.19: bl decrement_vpc_count ldrh r3, [r4, #4] cmp r3, #0 - bne .L1458 + bne .L1495 ldrh r2, [r4, #2] strb r3, [r4, #6] add r2, r2, #1 strh r2, [r4, #2] @ movhi ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1460: - ldr r3, .L1462 +.L1497: + ldr r3, .L1499 ldrb r1, [r3, #928] @ zero_extendqisi2 cmp r1, #0 ldmeqfd sp!, {r3, r4, r5, r6, r7, pc} @@ -12612,7 +13042,7 @@ FtlSlcSuperblockCheck.part.19: ldrh r2, [r3, r2] cmp r1, r2 ldmccfd sp!, {r3, r4, r5, r6, r7, pc} - ldr r1, .L1462+4 + ldr r1, .L1499+4 ldrh r2, [r4, #0] ldrh r0, [r4, #4] ldr r1, [r1, #-2016] @@ -12628,13 +13058,13 @@ FtlSlcSuperblockCheck.part.19: strb r1, [r4, #6] strh r3, [r4, #2] @ movhi ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1463: +.L1500: .align 2 -.L1462: +.L1499: .word .LANCHOR0 .word .LANCHOR2 .fnend - .size FtlSlcSuperblockCheck.part.19, .-FtlSlcSuperblockCheck.part.19 + .size FtlSlcSuperblockCheck.part.20, .-FtlSlcSuperblockCheck.part.20 .align 2 .global FtlSlcSuperblockCheck .type FtlSlcSuperblockCheck, %function @@ -12650,304 +13080,308 @@ FtlSlcSuperblockCheck: movw r3, #65535 cmp r2, r3 bxeq lr - b FtlSlcSuperblockCheck.part.19 + b FtlSlcSuperblockCheck.part.20 .fnend .size FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck .align 2 - .type allocate_data_superblock.part.20, %function -allocate_data_superblock.part.20: + .type allocate_data_superblock.part.21, %function +allocate_data_superblock.part.21: .fnstart - @ args = 0, pretend = 0, frame = 16 + @ args = 0, pretend = 0, frame = 24 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} - .pad #20 - sub sp, sp, #20 - ldr r4, .L1502 - mov r5, r0 - mov r8, r4 -.L1498: - ldr r3, .L1502+4 - cmp r5, r3 - bne .L1468 - ldr r3, .L1502+8 - ldrh r2, [r4, r3] - ldr r3, [r4, #-1184] + .pad #28 + sub sp, sp, #28 + ldr r5, .L1538 + mov r4, r0 + mov r8, r5 +.L1535: + ldr r3, .L1538+4 + cmp r4, r3 + bne .L1505 + ldr r3, .L1538+8 + ldrh r2, [r5, r3] + ldr r3, [r5, #-1184] mov r1, r2, lsr #1 mul ip, r3, r2 add r0, r1, #1 add r0, r0, ip, lsr #2 - ldr ip, .L1502+12 + ldr ip, .L1538+12 uxth r0, r0 ldr ip, [ip, #3840] cmp ip, #0 - beq .L1492 - ldr ip, [r4, #-1780] + beq .L1529 + ldr ip, [r5, #-1780] cmp ip, #29 - bhi .L1492 + bhi .L1529 cmp ip, #2 - bls .L1497 + bls .L1534 tst r2, #1 - beq .L1469 + beq .L1506 cmp r3, #0 moveq r1, r3 - beq .L1470 - b .L1469 -.L1468: - ldrb r3, [r5, #8] @ zero_extendqisi2 + beq .L1507 + b .L1506 +.L1505: + ldrb r3, [r4, #8] @ zero_extendqisi2 cmp r3, #1 - bne .L1497 - ldr r3, .L1502+12 + bne .L1534 + ldr r3, .L1538+12 movw r2, #3868 ldrh r2, [r3, r2] cmp r2, #1 - beq .L1497 + beq .L1534 ldrb r2, [r3, #928] @ zero_extendqisi2 cmp r2, #0 - bne .L1497 + bne .L1534 sub r2, r2, #2000 ldr r3, [r3, #3840] - ldrh r2, [r4, r2] + ldrh r2, [r5, r2] cmp r3, #0 mov r1, r2, lsr #3 - beq .L1469 - ldr r3, [r4, #-1780] + beq .L1506 + ldr r3, [r5, #-1780] cmp r3, #1 movls r1, #7 mulls r1, r1, r2 movls r1, r1, lsr #3 - b .L1469 -.L1492: + b .L1506 +.L1529: mov r1, r0 -.L1469: +.L1506: cmp r1, #0 subne r1, r1, #1 uxthne r1, r1 - b .L1470 -.L1497: + b .L1507 +.L1534: mov r1, #0 -.L1470: - ldrb r2, [r5, #8] @ zero_extendqisi2 - ldr r0, .L1502+16 +.L1507: + ldrb r2, [r4, #8] @ zero_extendqisi2 + ldr r0, .L1538+16 bl List_pop_index_node - ldr r3, .L1502+8 - ldrh r2, [r4, r3] + ldr r3, .L1538+8 + ldrh r2, [r5, r3] sub r2, r2, #1 - strh r2, [r4, r3] @ movhi + strh r2, [r5, r3] @ movhi uxth r7, r0 - mov r0, r5 - strh r7, [r5, #0] @ movhi + mov r0, r4 + strh r7, [r4, #0] @ movhi bl make_superblock - ldrb r3, [r5, #7] @ zero_extendqisi2 + ldrb r3, [r4, #7] @ zero_extendqisi2 cmp r3, #0 - beq .L1471 - ldr r2, .L1502+12 - movw r3, #3848 - ldr ip, [r4, #-2084] + beq .L1508 + ldr r3, .L1538+12 + movw r2, #3848 mov r6, #0 - mov sl, r5 - mov r1, r5 - ldrh r9, [r2, r3] + mov r9, r4 + mov r1, r4 mov r0, r6 - mov r3, ip + ldr ip, [r3, #4044] + ldrh sl, [r3, r2] mov r2, r6 - stmia sp, {r5, ip} - b .L1472 -.L1471: - ldr r3, [r4, #-2016] + mov r3, ip + stmib sp, {r4, ip} + b .L1509 +.L1508: + ldr r3, [r5, #-2016] mov r7, r7, asl #1 mvn r2, #0 strh r2, [r3, r7] @ movhi - b .L1498 -.L1475: + b .L1535 +.L1512: str r0, [r3, #8] - movw r5, #65535 + movw r4, #65535 str r0, [r3, #12] ldrh lr, [r1, #16] - cmp lr, r5 - beq .L1474 - ldr r5, [sp, #4] + cmp lr, r4 + beq .L1511 + ldr r4, [sp, #8] mov ip, #36 mov lr, lr, asl #10 - mla fp, ip, r6, r5 + mla fp, ip, r6, r4 add r6, r6, #1 uxth r6, r6 str lr, [fp, #4] -.L1474: +.L1511: add r2, r2, #1 add r3, r3, #36 add r1, r1, #2 uxth r2, r2 -.L1472: - cmp r2, r9 - bne .L1475 - ldr r3, .L1502+12 - ldr r5, [sp, #0] - ldr r3, [r3, #3840] - cmp r3, #0 - beq .L1476 - ldr r3, .L1502+20 - cmp r5, r3 - bne .L1476 - ldr r2, [r4, #-2080] +.L1509: + cmp r2, sl + bne .L1512 + ldr r3, .L1538+12 + ldr r4, [sp, #4] + ldr r2, [r3, #3840] + cmp r2, #0 + beq .L1513 + ldr r2, .L1538+20 + cmp r4, r2 + bne .L1513 + ldr r2, [r3, #4048] mov r3, r7, asl #1 ldrh r3, [r2, r3] cmp r3, #30 movhi r3, #0 - strhib r3, [r4, #-1988] -.L1476: - ldrb r3, [r5, #8] @ zero_extendqisi2 - ldr r2, [r4, #-2080] + strhib r3, [r5, #-1988] +.L1513: + ldrb r3, [r4, #8] @ zero_extendqisi2 + ldr r2, .L1538+12 cmp r3, #0 mov r3, r7, asl #1 - ldrh r1, [r2, r3] - bne .L1477 - cmp r1, #0 - ldrne ip, .L1502+12 - movwne r0, #3906 - moveq r1, #2 - ldrneh r0, [ip, r0] - addne r1, r1, r0 - strh r1, [r2, r3] @ movhi - ldr r3, [r4, #-1796] + bne .L1514 + ldr r1, [r2, #4048] + ldrh r0, [r1, r3] + cmp r0, #0 + movwne ip, #3906 + moveq r2, #2 + ldrneh r2, [r2, ip] + streqh r2, [r1, r3] @ movhi + addne r0, r0, r2 + strneh r0, [r1, r3] @ movhi + ldr r3, [r5, #-1796] mov r0, r7 mov r1, #0 add r3, r3, #1 - str r3, [r4, #-1796] - b .L1500 -.L1477: + str r3, [r5, #-1796] + b .L1536 +.L1514: + ldr r2, [r2, #4048] + mov r0, r7 + ldrh r1, [r2, r3] add r1, r1, #1 strh r1, [r2, r3] @ movhi - ldr r3, [r4, #-1792] - mov r0, r7 + ldr r3, [r5, #-1792] mov r1, #1 add r3, r3, #1 - str r3, [r4, #-1792] -.L1500: + str r3, [r5, #-1792] +.L1536: + ldr sl, .L1538+12 bl ftl_set_blk_mode - ldr r3, [r4, #-2080] - mov r9, r7, asl #1 - ldr r2, [r4, #-1784] + mov fp, r7, asl #1 + ldr r2, [r5, #-1784] ldr r0, [r8, #-1796] - ldrh r3, [r3, r9] + ldr r3, [sl, #4048] + ldrh r3, [r3, fp] cmp r3, r2 - movw r2, #3906 - strhi r3, [r4, #-1784] - ldr r3, .L1502+12 - ldrh r1, [r3, r2] - ldr r2, [r8, #-1792] - mla r0, r0, r1, r2 - mov r2, #3856 - ldrh r1, [r3, r2] + strhi r3, [r5, #-1784] + movw r3, #3906 + ldrh r2, [sl, r3] + ldr r3, [r8, #-1792] + mla r0, r0, r2, r3 + mov r3, #3856 + ldrh r1, [sl, r3] bl __aeabi_uidiv ldr r3, [r8, #-920] ldr r2, [r3, #16] add r2, r2, #1 str r2, [r3, #16] - ldr r3, [r8, #-2084] + ldr r3, [sl, #4044] mov r2, #0 str r0, [r8, #-1788] - b .L1482 -.L1483: + b .L1519 +.L1520: add r2, r2, #1 ldr r1, [r3, #-32] uxth r2, r2 bic r1, r1, #1020 bic r1, r1, #3 str r1, [r3, #-32] -.L1482: +.L1519: cmp r2, r6 add r3, r3, #36 - bne .L1483 - ldr r3, .L1502+12 - ldrb r3, [r3, #928] @ zero_extendqisi2 + bne .L1520 + ldr sl, .L1538+12 + ldrb r3, [sl, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L1484 - ldrb r3, [r5, #8] @ zero_extendqisi2 + beq .L1521 + ldrb r3, [r4, #8] @ zero_extendqisi2 mov r2, r6 - ldr r0, [r4, #-2084] + ldr r0, [sl, #4044] cmp r3, #1 moveq r1, #0 movne r1, #1 bl FlashEraseBlocks -.L1484: +.L1521: mov r2, r6 - ldr r0, [r4, #-2084] - ldrb r1, [r5, #8] @ zero_extendqisi2 - mov fp, #0 + ldr r0, [sl, #4044] + ldrb r1, [r4, #8] @ zero_extendqisi2 bl FlashEraseBlocks - mov r2, #36 - mul r2, r2, r6 - mov r3, r7 - mov ip, r9 - mov r6, fp - mov r7, r5 - mov r9, r2 - b .L1486 -.L1488: - ldr r1, [r4, #-2084] - add r0, r1, fp - ldr r5, [r1, fp] - cmn r5, #1 - bne .L1487 + mov r1, #36 + mul r1, r1, r6 + mov r6, #0 + mov r3, fp + mov sl, r6 + mov fp, r7 + ldr r2, .L1538+12 + mov r7, r1 + b .L1523 +.L1525: + ldr r1, [r2, #4044] + add r0, r1, r6 + ldr r1, [r1, r6] + cmn r1, #1 + bne .L1524 ldr r0, [r0, #4] - add r6, r6, #1 - str r3, [sp, #12] + add sl, sl, #1 + str r1, [sp, #20] ubfx r0, r0, #10, #16 - str ip, [sp, #8] + str r2, [sp, #16] + str r3, [sp, #12] bl FtlBbmMapBadBlock - strh r5, [sl, #16] @ movhi - ldrb r1, [r7, #7] @ zero_extendqisi2 + ldr r1, [sp, #20] + strh r1, [r9, #16] @ movhi + ldrb r1, [r4, #7] @ zero_extendqisi2 sub r1, r1, #1 - strb r1, [r7, #7] - ldr ip, [sp, #8] + strb r1, [r4, #7] ldr r3, [sp, #12] -.L1487: - add fp, fp, #36 - add sl, sl, #2 -.L1486: - cmp fp, r9 - bne .L1488 - cmp r6, #0 - mov r5, r7 - mov r9, ip - mov r7, r3 - beq .L1489 - mov r0, r3 + ldr r2, [sp, #16] +.L1524: + add r6, r6, #36 + add r9, r9, #2 +.L1523: + cmp r6, r7 + bne .L1525 + cmp sl, #0 + mov r7, fp + mov fp, r3 + beq .L1526 + mov r0, r7 bl update_multiplier_value bl FtlBbmTblFlush -.L1489: - ldrb r3, [r5, #7] @ zero_extendqisi2 +.L1526: + ldrb r3, [r4, #7] @ zero_extendqisi2 cmp r3, #0 - ldreq r3, [r8, #-2016] + ldreq r3, [r5, #-2016] mvneq r2, #0 - streqh r2, [r3, r9] @ movhi - beq .L1498 -.L1490: - ldr r1, .L1502+12 + streqh r2, [r3, fp] @ movhi + beq .L1535 +.L1527: + ldr r1, .L1538+12 movw r2, #3916 ldrh r2, [r1, r2] - strh r7, [r5, #0] @ movhi + strh r7, [r4, #0] @ movhi mul r2, r2, r3 mov r3, #0 - strh r3, [r5, #2] @ movhi - strb r3, [r5, #6] - ldr r3, .L1502 + strh r3, [r4, #2] @ movhi + strb r3, [r4, #6] + ldr r3, .L1538 uxth r2, r2 - strh r2, [r5, #4] @ movhi + strh r2, [r4, #4] @ movhi ldr r1, [r3, #-1804] - str r1, [r5, #12] + str r1, [r4, #12] add r1, r1, #1 str r1, [r3, #-1804] - ldrh r0, [r5, #0] + ldrh r0, [r4, #0] ldr r1, [r3, #-2016] mov r3, r0, asl #1 strh r2, [r1, r3] @ movhi - add sp, sp, #20 + add sp, sp, #28 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1503: +.L1539: .align 2 -.L1502: +.L1538: .word .LANCHOR2 .word .LANCHOR2-1900 .word -2000 @@ -12955,7 +13389,7 @@ allocate_data_superblock.part.20: .word .LANCHOR2-2004 .word .LANCHOR2-1996 .fnend - .size allocate_data_superblock.part.20, .-allocate_data_superblock.part.20 + .size allocate_data_superblock.part.21, .-allocate_data_superblock.part.21 .align 2 .global allocate_data_superblock .type allocate_data_superblock, %function @@ -12965,28 +13399,27 @@ allocate_data_superblock: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, lr} .save {r3, lr} - ldr r3, .L1506 - ldr r3, [r3, #-2088] + ldr r3, .L1542 + ldr r3, [r3, #4040] cmp r3, #0 - bne .L1505 - bl allocate_data_superblock.part.20 -.L1505: + bne .L1541 + bl allocate_data_superblock.part.21 +.L1541: mov r0, #0 ldmfd sp!, {r3, pc} -.L1507: +.L1543: .align 2 -.L1506: - .word .LANCHOR2 +.L1542: + .word .LANCHOR0 .fnend .size allocate_data_superblock, .-allocate_data_superblock .align 2 - .global FtlSuperblockPowerLostFix - .type FtlSuperblockPowerLostFix, %function -FtlSuperblockPowerLostFix: + .type FtlSuperblockPowerLostFix.part.19, %function +FtlSuperblockPowerLostFix.part.19: .fnstart @ args = 0, pretend = 0, frame = 40 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L1517 + ldr r3, .L1553 stmfd sp!, {r4, r5, r6, r7, r8, lr} .save {r4, r5, r6, r7, r8, lr} mov r4, r0 @@ -12994,27 +13427,27 @@ FtlSuperblockPowerLostFix: .pad #40 sub sp, sp, #40 cmp r7, #0 - beq .L1516 + beq .L1552 ldrb r7, [r0, #8] @ zero_extendqisi2 cmp r7, #1 ldreqh r6, [r0, #4] - beq .L1509 + beq .L1545 mov r7, #0 -.L1516: +.L1552: mov r6, #12 -.L1509: +.L1545: mvn r8, #0 - ldr r5, .L1517+4 - b .L1510 -.L1513: + ldr r5, .L1553+4 + b .L1546 +.L1549: ldrh r3, [r4, #4] cmp r3, #0 - beq .L1511 + beq .L1547 mov r0, r4 bl get_new_active_ppa cmn r0, #1 str r0, [sp, #8] - beq .L1511 + beq .L1547 ldr r2, [r5, #-936] add r0, sp, #4 ldr r3, [r5, #-960] @@ -13039,11 +13472,11 @@ FtlSuperblockPowerLostFix: bl FlashProgPages ldrh r0, [r4, #0] bl decrement_vpc_count -.L1510: +.L1546: cmp r6, #0 - bne .L1513 -.L1511: - ldr r2, .L1517+4 + bne .L1549 +.L1547: + ldr r2, .L1553+4 ldrh r3, [r4, #0] ldrh r1, [r4, #4] ldr r2, [r2, #-2016] @@ -13051,7 +13484,7 @@ FtlSuperblockPowerLostFix: ldrh r0, [r2, r3] rsb r1, r1, r0 strh r1, [r2, r3] @ movhi - ldr r2, .L1517 + ldr r2, .L1553 movw r3, #3916 ldrh r3, [r2, r3] strh r3, [r4, #2] @ movhi @@ -13060,12 +13493,31 @@ FtlSuperblockPowerLostFix: strh r3, [r4, #4] @ movhi add sp, sp, #40 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L1518: +.L1554: .align 2 -.L1517: +.L1553: .word .LANCHOR0 .word .LANCHOR2 .fnend + .size FtlSuperblockPowerLostFix.part.19, .-FtlSuperblockPowerLostFix.part.19 + .align 2 + .global FtlSuperblockPowerLostFix + .type FtlSuperblockPowerLostFix, %function +FtlSuperblockPowerLostFix: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + ldr r3, .L1557 + ldr r3, [r3, #4040] + cmp r3, #0 + bxne lr + b FtlSuperblockPowerLostFix.part.19 +.L1558: + .align 2 +.L1557: + .word .LANCHOR0 + .fnend .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix .align 2 .global FtlLowFormatEraseBlock @@ -13076,161 +13528,165 @@ FtlLowFormatEraseBlock: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + mov sl, r1 + ldr r8, .L1589 .pad #28 sub sp, sp, #28 - ldr r7, .L1548 - mov r8, r1 - ldr r9, .L1548+4 - str r0, [sp, #12] - ldr r6, [r7, #-2088] - ldrb r0, [r9, #3837] @ zero_extendqisi2 + str r0, [sp, #8] + ldr r6, [r8, #4040] + ldrb r1, [r8, #3837] @ zero_extendqisi2 cmp r6, #0 - str r0, [sp, #16] + str r1, [sp, #16] movne r4, #0 - bne .L1520 - ldrb r2, [r9, #928] @ zero_extendqisi2 + bne .L1560 + ldrb r2, [r8, #928] @ zero_extendqisi2 mov r5, r6 - ldr r3, [sp, #12] + ldr fp, .L1589+4 mov r4, r6 - mov fp, #36 - str r2, [sp, #8] - str r3, [r7, #-984] - b .L1521 -.L1525: - mul r3, fp, r6 - ldr r2, [r7, #-2084] - mov r0, #0 - ldr r1, [sp, #12] - str r0, [r2, r3] - add r3, r9, r6 + mov r9, #36 + str r2, [sp, #4] + str r0, [fp, #-984] + b .L1561 +.L1565: + mul r3, r9, r6 + ldr r2, [r8, #4044] + mov r1, #0 + str r1, [r2, r3] + add r3, r8, r6 + ldr r1, [sp, #8] ldrb r0, [r3, #3874] @ zero_extendqisi2 bl V2P_block - cmp r8, #0 - mov sl, r0 - beq .L1522 + cmp sl, #0 + mov r7, r0 + beq .L1562 bl IsBlkInVendorPart cmp r0, #0 - bne .L1523 -.L1522: - mov r0, sl + bne .L1563 +.L1562: + mov r0, r7 bl FtlBbmIsBadBlock cmp r0, #0 addne r4, r4, #1 uxthne r4, r4 - bne .L1523 + bne .L1563 movw r1, #3928 - ldr r3, [r7, #-2084] - ldrh r2, [r9, r1] - mov sl, sl, asl #10 - mla r3, fp, r5, r3 + ldr r3, [r8, #4044] + ldrh r2, [r8, r1] + mov r7, r7, asl #10 + mla r3, r9, r5, r3 mul r2, r2, r5 add r5, r5, #1 uxth r5, r5 add r1, r2, #3 cmp r2, #0 - str sl, [r3, #4] + str r7, [r3, #4] movlt r2, r1 - ldr r1, [r7, #-932] + ldr r1, [fp, #-932] bic r2, r2, #3 str r0, [r3, #8] add r2, r1, r2 str r2, [r3, #12] -.L1523: +.L1563: add r6, r6, #1 uxth r6, r6 -.L1521: +.L1561: movw r2, #3848 - ldr sl, .L1548+4 - ldrh r3, [r9, r2] + ldr r7, .L1589 + ldrh r3, [r8, r2] cmp r3, r6 - bhi .L1525 + bhi .L1565 cmp r5, #0 - beq .L1520 - ldr r3, [sp, #8] - mov r7, #0 - ldr r9, .L1548 + beq .L1560 + ldr r3, [sp, #4] + mov r8, #0 + ldr r0, [r7, #4044] mov r2, r5 adds r6, r3, #0 - strb r7, [sl, #3837] + strb r8, [r7, #3837] + mov r9, r8 movne r6, #1 - ldr r0, [r9, #-2084] mov r1, r6 bl FlashEraseBlocks - ldr r0, [sp, #16] - strb r0, [sl, #3837] - mov sl, r7 -.L1528: - ldr r3, [r9, #-2084] - add r2, r3, r7 - ldr r3, [r3, r7] + ldr r1, [sp, #16] + strb r1, [r7, #3837] +.L1568: + ldr r3, [r7, #4044] + add r2, r3, r8 + ldr r3, [r3, r8] cmn r3, #1 - bne .L1527 + bne .L1567 ldr r0, [r2, #4] add r4, r4, #1 ubfx r0, r0, #10, #16 uxth r4, r4 bl FtlBbmMapBadBlock -.L1527: - add sl, sl, #1 - add r7, r7, #36 - uxth sl, sl - cmp sl, r5 - bne .L1528 - cmp r8, #0 - moveq r2, #6 - moveq sl, #1 - streq r2, [sp, #8] - beq .L1529 - ldr r3, .L1548+4 +.L1567: + add r9, r9, #1 + add r8, r8, #36 + uxth r9, r9 + cmp r9, r5 + bne .L1568 + cmp sl, #0 + beq .L1582 + ldr r3, .L1589 movw r2, #3918 - ldrh sl, [r3, r2] + ldrh r2, [r3, r2] ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - moveq r1, sl, lsr #2 - streq r1, [sp, #8] + str r2, [sp, #12] + moveq r2, r2, lsr #2 + streq r2, [sp, #4] moveq r6, #1 - movne r6, #1 - strne r6, [sp, #8] -.L1529: - mov r7, #0 -.L1537: + beq .L1569 + b .L1588 +.L1582: + mov r3, #6 + mov r1, #1 + str r3, [sp, #4] + str r1, [sp, #12] + b .L1569 +.L1588: + mov r6, #1 + str r6, [sp, #4] +.L1569: + ldr r7, .L1589 + mov r8, #0 +.L1577: mov r9, #0 - ldr fp, .L1548 + ldr fp, .L1589+4 mov r5, r9 - b .L1530 -.L1533: - mov r0, #36 - ldr r2, [fp, #-2084] - mul r3, r0, r9 + b .L1570 +.L1573: + mov r1, #36 + ldr r2, [r7, #4044] + mul r3, r1, r9 mov r1, #0 str r1, [r2, r3] - ldr r2, .L1548+4 - ldr r1, [sp, #12] - add r3, r2, r9 + add r3, r7, r9 + ldr r1, [sp, #8] ldrb r0, [r3, #3874] @ zero_extendqisi2 bl V2P_block - cmp r8, #0 + cmp sl, #0 str r0, [sp, #20] - beq .L1531 + beq .L1571 bl IsBlkInVendorPart cmp r0, #0 - bne .L1532 -.L1531: + bne .L1572 +.L1571: ldr r0, [sp, #20] bl FtlBbmIsBadBlock cmp r0, #0 - bne .L1532 - ldr r3, [fp, #-2084] - mov r0, #36 + bne .L1572 + ldr r3, [r7, #4044] + mov r2, #36 ldr r1, [sp, #20] - mla r3, r0, r5, r3 - add r2, r7, r1, asl #10 - ldr r1, .L1548+4 - movw r0, #3928 + mla r3, r2, r5, r3 + add r2, r8, r1, asl #10 + movw r1, #3928 str r2, [r3, #4] ldr r2, [fp, #-944] str r2, [r3, #8] - ldrh r2, [r1, r0] + ldrh r2, [r7, r1] mul r2, r2, r5 add r5, r5, #1 uxth r5, r5 @@ -13241,120 +13697,111 @@ FtlLowFormatEraseBlock: bic r2, r2, #3 add r2, r1, r2 str r2, [r3, #12] -.L1532: +.L1572: add r9, r9, #1 uxth r9, r9 -.L1530: - ldr ip, .L1548+4 +.L1570: movw r2, #3848 - ldrh r3, [ip, r2] + ldr ip, .L1589 + ldrh r3, [r7, r2] cmp r3, r9 - bhi .L1533 + bhi .L1573 cmp r5, #0 - beq .L1520 - ldr r9, .L1548 + beq .L1560 + ldr r0, [ip, #4044] mov r3, #0 mov r1, r5 strb r3, [ip, #3837] mov r2, r6 mov r3, #1 - ldr r0, [r9, #-2084] - mov fp, #0 - str ip, [sp, #4] + str ip, [sp, #0] bl FlashProgPages - ldr ip, [sp, #4] - mov r3, fp - ldr r0, [sp, #16] - strb r0, [ip, #3837] - mov ip, r8 - mov r8, r6 - mov r6, r5 - mov r5, fp -.L1536: - ldr r2, [r9, #-2084] - add r1, r2, fp - ldr r2, [r2, fp] - cmp r2, #0 - beq .L1535 - ldr r0, [r1, #4] + ldr ip, [sp, #0] + mov r9, #0 + ldr r1, [sp, #16] + mov fp, r9 + strb r1, [ip, #3837] +.L1576: + ldr r3, [r7, #4044] + add r2, r3, r9 + ldr r3, [r3, r9] + cmp r3, #0 + beq .L1575 + ldr r0, [r2, #4] add r4, r4, #1 - str ip, [sp, #4] ubfx r0, r0, #10, #16 uxth r4, r4 bl FtlBbmMapBadBlock - ldr ip, [sp, #4] -.L1535: - add r5, r5, #1 - add fp, fp, #36 - uxth r5, r5 - cmp r5, r6 - bne .L1536 - ldr r1, [sp, #8] - mov r5, r6 - mov r6, r8 - mov r8, ip - add r7, r7, r1 - uxth r7, r7 - cmp r7, sl - bcc .L1537 - ldr r9, .L1548 +.L1575: + add fp, fp, #1 + add r9, r9, #36 + uxth fp, fp + cmp fp, r5 + bne .L1576 + ldr r2, [sp, #4] + ldr r3, [sp, #12] + add r8, r8, r2 + uxth r8, r8 + cmp r8, r3 + bcc .L1577 + ldr r9, .L1589 mov r7, #0 - mov sl, r7 -.L1539: - cmp r8, #0 - beq .L1538 - ldr r3, [r9, #-2084] + mov r8, r7 +.L1579: + cmp sl, #0 + beq .L1578 + ldr r3, [r9, #4044] add r2, r3, r7 ldr r3, [r3, r7] cmp r3, #0 - bne .L1538 + bne .L1578 ldr r0, [r2, #4] mov r1, #1 ubfx r0, r0, #10, #16 bl FtlFreeSysBlkQueueIn -.L1538: - add sl, sl, #1 +.L1578: + add r8, r8, #1 add r7, r7, #36 - uxth sl, sl - cmp sl, r5 - bne .L1539 - ldr r2, [sp, #12] - cmp r2, #63 + uxth r8, r8 + cmp r8, r5 + bne .L1579 + ldr r1, [sp, #8] + cmp r1, #63 movhi r3, #0 movls r3, #1 - cmp r8, #0 - moveq r8, r3 - orrne r8, r3, #1 - cmp r8, #0 - beq .L1520 - ldr r3, .L1548 + cmp sl, #0 + moveq sl, r3 + orrne sl, r3, #1 + cmp sl, #0 + beq .L1560 + ldr r3, .L1589 mov r1, r6 - mov r2, sl - ldr r0, [r3, #-2084] + mov r2, r8 + ldr r0, [r3, #4044] bl FlashEraseBlocks -.L1520: +.L1560: mov r0, r4 add sp, sp, #28 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1549: +.L1590: .align 2 -.L1548: - .word .LANCHOR2 +.L1589: .word .LANCHOR0 + .word .LANCHOR2 .fnend .size FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock .align 2 - .type FlashTestBlk.part.23, %function -FlashTestBlk.part.23: + .type FlashTestBlk.part.25, %function +FlashTestBlk.part.25: .fnstart @ args = 0, pretend = 0, frame = 104 @ frame_needed = 0, uses_anonymous_args = 0 -.L1551: +.L1592: stmfd sp!, {r4, r5, lr} .save {r4, r5, lr} .pad #108 sub sp, sp, #108 - ldr r4, .L1553 + ldr r4, .L1594 mov r5, r0 mov r1, #165 add r0, sp, #40 @@ -13388,12 +13835,12 @@ FlashTestBlk.part.23: mov r0, r4 add sp, sp, #108 ldmfd sp!, {r4, r5, pc} -.L1554: +.L1595: .align 2 -.L1553: +.L1594: .word .LANCHOR2 .fnend - .size FlashTestBlk.part.23, .-FlashTestBlk.part.23 + .size FlashTestBlk.part.25, .-FlashTestBlk.part.25 .align 2 .global FlashTestBlk .type FlashTestBlk, %function @@ -13402,17 +13849,17 @@ FlashTestBlk: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L1557 + ldr r3, .L1598 ldr r3, [r3, #156] cmp r0, r3 - bcc .L1556 - b FlashTestBlk.part.23 -.L1556: + bcc .L1597 + b FlashTestBlk.part.25 +.L1597: mov r0, #0 bx lr -.L1558: +.L1599: .align 2 -.L1557: +.L1598: .word .LANCHOR2 .fnend .size FlashTestBlk, .-FlashTestBlk @@ -13423,7 +13870,7 @@ FlashMakeFactorBbt: .fnstart @ args = 0, pretend = 0, frame = 72 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L1587 + ldr r3, .L1628 movw r1, #3062 movw r2, #3060 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} @@ -13434,13 +13881,13 @@ FlashMakeFactorBbt: mov r5, #0 ldrh fp, [r3, r1] mov r1, #1 - ldr r4, .L1587+4 + ldr r4, .L1628+4 mul fp, fp, r2 ldr r2, [r3, #3624] ldr r0, [r4, #228] ldrb r2, [r2, #24] @ zero_extendqisi2 str r0, [sp, #28] - ldr r0, .L1587+8 + ldr r0, .L1628+8 uxth fp, fp str r2, [sp, #12] ldr r2, [r3, #856] @@ -13458,17 +13905,17 @@ FlashMakeFactorBbt: bl ftl_memset sub r3, fp, #1 mov r2, fp, lsr #4 - ldr r4, .L1587 + ldr r4, .L1628 uxth r3, r3 str r2, [sp, #20] str r3, [sp, #24] - b .L1561 -.L1583: - ldr r3, .L1587+4 + b .L1602 +.L1624: + ldr r3, .L1628+4 add r2, r3, r5, asl #1 ldrh r6, [r2, #232] cmp r6, #0 - bne .L1562 + bne .L1603 movw r2, #3068 ldr r0, [r3, #148] ldrh r2, [r4, r2] @@ -13480,14 +13927,14 @@ FlashMakeFactorBbt: bl ftl_memset add r3, r4, r5 ldrb r9, [r3, #3764] @ zero_extendqisi2 - b .L1563 -.L1571: + b .L1604 +.L1612: mvn r3, #0 strb r3, [sp, #34] strb r3, [sp, #35] ldr r3, [sp, #12] tst r3, #1 - beq .L1564 + beq .L1605 ldr r3, [sl, #3588] add r2, sp, #34 mov r0, r9 @@ -13498,7 +13945,7 @@ FlashMakeFactorBbt: ldrb r2, [r4, #852] @ zero_extendqisi2 ldr r3, [sp, #4] cmp r2, #1 - bne .L1564 + bne .L1605 ldr r1, [r4, #856] add r2, sp, #35 mov r0, r9 @@ -13508,10 +13955,10 @@ FlashMakeFactorBbt: ldrb r2, [sp, #35] @ zero_extendqisi2 and r3, r2, r3 strb r3, [sp, #34] -.L1564: +.L1605: ldr r0, [sp, #12] tst r0, #2 - beq .L1565 + beq .L1606 ldr r3, [r4, #3624] mov r0, r9 add r2, sp, #35 @@ -13521,42 +13968,42 @@ FlashMakeFactorBbt: add r1, r1, r3 add r1, r1, r6 bl FlashReadSpare -.L1565: +.L1606: ldr r3, [r4, #3624] ldrb r3, [r3, #7] @ zero_extendqisi2 cmp r3, #1 cmpne r3, #8 ldrb r3, [sp, #34] @ zero_extendqisi2 - bne .L1566 + bne .L1607 cmp r3, #0 - beq .L1585 + beq .L1626 ldrb r0, [sp, #35] @ zero_extendqisi2 rsbs r0, r0, #1 movcc r0, #0 - b .L1567 -.L1566: + b .L1608 +.L1607: cmp r3, #255 - bne .L1585 + bne .L1626 ldrb r0, [sp, #35] @ zero_extendqisi2 subs r0, r0, #255 movne r0, #1 - b .L1567 -.L1585: + b .L1608 +.L1626: mov r0, #1 -.L1567: +.L1608: ldr r2, [sp, #12] tst r2, #4 - beq .L1568 + beq .L1609 ldr r1, [sl, #3588] mov r0, r9 add r1, r6, r1 bl SandiskProgTestBadBlock -.L1568: +.L1609: cmp r0, #0 - beq .L1569 + beq .L1610 mov r1, r5 mov r2, r8 - ldr r0, .L1587+12 + ldr r0, .L1628+12 add r7, r7, #1 bl printk ldr r3, [sp, #16] @@ -13564,7 +14011,7 @@ FlashMakeFactorBbt: mov ip, #1 uxth r7, r7 mov r2, r3, lsr #5 - ldr r3, .L1587+4 + ldr r3, .L1628+4 ldr r3, [r3, #148] ldr r1, [r3, r2, asl #2] orr r1, r1, ip, asl r0 @@ -13573,18 +14020,18 @@ FlashMakeFactorBbt: ldrb r3, [r4, #3762] @ zero_extendqisi2 mul r3, r3, r0 cmp r7, r3 - bgt .L1570 -.L1569: + bgt .L1611 +.L1610: ldr r2, [sp, #8] add r8, r8, #1 add r6, r6, r2 -.L1563: +.L1604: uxth r3, r8 str r3, [sp, #16] cmp r3, fp - bcc .L1571 -.L1570: - ldr r0, .L1587+16 + bcc .L1612 +.L1611: + ldr r0, .L1628+16 mov r1, r5 mov r2, r7 bl printk @@ -13592,29 +14039,29 @@ FlashMakeFactorBbt: ldr r0, [sp, #20] mul r3, r3, r0 cmp r7, r3 - blt .L1572 + blt .L1613 movw r3, #3068 mov r1, #0 ldrh r2, [r4, r3] - ldr r3, .L1587+4 + ldr r3, .L1628+4 mov r2, r2, asl #9 ldr r0, [r3, #148] bl ftl_memset -.L1572: +.L1613: cmp r5, #0 - bne .L1573 - ldr sl, .L1587+4 + bne .L1614 + ldr sl, .L1628+4 mov r8, r5 mov r7, r5 ldrh r9, [sl, #156] - b .L1574 -.L1576: + b .L1615 +.L1617: mov r0, r6 bl FlashTestBlk cmp r0, #0 - beq .L1575 + beq .L1616 mov r1, r6 - ldr r0, .L1587+20 + ldr r0, .L1628+20 bl printk ldr r3, [sl, #148] mov r2, r6, lsr #5 @@ -13625,27 +14072,27 @@ FlashMakeFactorBbt: uxth r7, r7 orr r6, r1, r0, asl r6 str r6, [r3, r2, asl #2] -.L1575: +.L1616: add r8, r8, #1 uxth r8, r8 -.L1574: +.L1615: add r6, r8, r9 ldrb r3, [r4, #853] @ zero_extendqisi2 uxth r6, r6 cmp r3, r6 - bhi .L1576 + bhi .L1617 ldr r6, [sp, #24] sub r9, fp, #50 - ldr sl, .L1587+4 + ldr sl, .L1628+4 mov r8, #1 - b .L1577 -.L1579: + b .L1618 +.L1620: mov r0, r6 bl FlashTestBlk cmp r0, #0 - beq .L1578 + beq .L1619 mov r1, r6 - ldr r0, .L1587+20 + ldr r0, .L1628+20 bl printk ldr r3, [sl, #148] mov r2, r6, lsr #5 @@ -13653,48 +14100,48 @@ FlashMakeFactorBbt: ldr r1, [r3, r2, asl #2] orr r1, r1, r8, asl r0 str r1, [r3, r2, asl #2] -.L1578: +.L1619: sub r6, r6, #1 uxth r6, r6 -.L1577: +.L1618: cmp r6, r9 - bgt .L1579 - ldr r3, .L1587+4 + bgt .L1620 + ldr r3, .L1628+4 ldrb r1, [r4, #853] @ zero_extendqisi2 ldr r2, [r3, #156] rsb r2, r2, r1 cmp r7, r2 - bcc .L1573 + bcc .L1614 movw r2, #3068 ldr r0, [r3, #148] ldrh r2, [r4, r2] mov r1, #0 mov r2, r2, asl #9 bl ftl_memset -.L1573: +.L1614: mul r8, fp, r5 - ldr r7, .L1587+4 + ldr r7, .L1628+4 ldr r6, [sp, #24] ldr r9, [sp, #28] add sl, r7, r5, asl #1 -.L1580: - ldr r0, .L1587+24 +.L1621: + ldr r0, .L1628+24 mov r1, r5 mov r2, r6 bl printk ldr r3, [r7, #148] - b .L1581 -.L1582: + b .L1622 +.L1623: sub r6, r6, #1 uxth r6, r6 -.L1581: +.L1622: mov r1, r6, lsr #5 and r2, r6, #31 ldr r1, [r3, r1, asl #2] mov r2, r1, lsr r2 ands r2, r2, #1 - bne .L1582 - ldr r3, .L1587+28 + bne .L1623 + ldr r3, .L1628+28 mov r1, #1 strh r6, [sl, #232] @ movhi add r0, sp, #36 @@ -13719,26 +14166,26 @@ FlashMakeFactorBbt: cmp r3, #0 subne r6, r6, #1 uxthne r6, r6 - bne .L1580 -.L1562: + bne .L1621 +.L1603: add r5, r5, #1 uxtb r5, r5 -.L1561: +.L1602: ldrb r3, [r4, #3762] @ zero_extendqisi2 cmp r3, r5 - bhi .L1583 + bhi .L1624 add sp, sp, #76 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1588: +.L1629: .align 2 -.L1587: +.L1628: .word .LANCHOR0 .word .LANCHOR2 - .word .LC111 - .word .LC112 - .word .LC113 - .word .LC114 - .word .LC115 + .word .LC118 + .word .LC119 + .word .LC120 + .word .LC121 + .word .LC122 .word -3872 .fnend .size FlashMakeFactorBbt, .-FlashMakeFactorBbt @@ -13749,8 +14196,8 @@ ftl_map_blk_gc: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + .save {r4, r5, r6, r7, r8, r9, sl, lr} mov r4, r0 ldr r6, [r0, #12] ldr r5, [r0, #24] @@ -13759,61 +14206,61 @@ ftl_map_blk_gc: ldrh r2, [r4, #8] sub r3, ip, #4 cmp r2, r3 - bge .L1590 + bge .L1631 ldrh r2, [r4, #40] movw r3, #65535 cmp r2, r3 - beq .L1591 - ldr r1, .L1603 + beq .L1632 + ldr r1, .L1645 movw r3, #3918 ldrh r2, [r4, #2] ldrh r3, [r1, r3] cmp r2, r3 - bcc .L1591 -.L1590: + bcc .L1632 +.L1631: ldrh r1, [r4, #40] movw r3, #65535 uxth r7, r0 cmp r1, r3 - beq .L1592 - ldr r0, .L1603 + beq .L1633 + ldr r0, .L1645 movw r2, #3918 ldrh r3, [r4, #2] ldrh r2, [r0, r2] cmp r2, r3 movls r0, r6 movls r2, #0 - bhi .L1592 - b .L1593 -.L1595: + bhi .L1633 + b .L1634 +.L1636: ldrh lr, [r0], #2 cmp lr, r1 - beq .L1602 + beq .L1644 add r2, r2, #1 uxth r2, r2 -.L1593: +.L1634: cmp r2, ip - bne .L1595 - b .L1594 -.L1602: + bne .L1636 + b .L1635 +.L1644: mov r7, r2 -.L1594: +.L1635: mov r2, r2, asl #1 - ldr r0, .L1603+4 + ldr r0, .L1645+4 ldrh r2, [r6, r2] bl printk mvn r3, #0 strh r3, [r4, #40] @ movhi -.L1592: +.L1633: mov r7, r7, asl #1 ldrh r8, [r6, r7] cmp r8, #0 - beq .L1591 + beq .L1632 ldr r3, [r4, #32] cmp r3, #0 - bne .L1591 + bne .L1632 mov r2, #1 - ldr r1, .L1603 + ldr r1, .L1645 str r2, [r4, #32] strh r3, [r6, r7] @ movhi ldrh r3, [r4, #8] @@ -13823,77 +14270,83 @@ ftl_map_blk_gc: movw r3, #3918 ldrh r3, [r1, r3] cmp r2, r3 - bcc .L1596 + bcc .L1637 mov r0, r4 bl ftl_map_blk_alloc_new_blk -.L1596: - mov r7, #0 - ldr r6, .L1603+8 - mov fp, r7 - b .L1597 -.L1600: - ldr r3, [r5, r7, asl #2] - mov r9, r7, asl #2 +.L1637: + mov r6, #0 + ldr r7, .L1645+8 + b .L1638 +.L1643: + ldr r3, [r5, r6, asl #2] + add r9, r5, r6, asl #2 cmp r8, r3, lsr #10 - bne .L1598 - ldr r3, [r6, #-956] + bne .L1639 + ldr r3, [r7, #-956] mov r1, #1 - ldr sl, [r6, #-936] + ldr sl, [r7, #-936] mov r2, r1 - ldr r0, .L1603+12 - str r3, [r6, #188] - str sl, [r6, #192] - ldr r3, [r5, r7, asl #2] - str r3, [r6, #184] + ldr r0, .L1645+12 + str r3, [r7, #188] + str sl, [r7, #192] + ldr r3, [r5, r6, asl #2] + str r3, [r7, #184] bl FlashReadPages - ldr r3, [r6, #180] + ldr r3, [r7, #180] cmn r3, #1 - bne .L1599 - str fp, [r5, r9] - ldr r0, .L1603+16 - ldr r1, [r6, #184] + beq .L1640 + ldrh r3, [sl, #8] + cmp r3, r6 + beq .L1641 +.L1640: + mov r3, #0 + str r3, [r9, #0] + ldr r3, .L1645+8 ldrh r2, [sl, #8] + ldr r0, .L1645+16 + ldr r1, [r3, #184] bl printk - mov r3, #1 - str r3, [r6, #-2088] - b .L1598 -.L1599: + ldr r3, .L1645 + mov r2, #1 + str r2, [r3, #4040] + b .L1642 +.L1641: mov r0, r4 - mov r1, r7 - ldr r2, [r6, #188] + mov r1, r6 + ldr r2, [r7, #188] bl FtlMapWritePage -.L1598: - add r7, r7, #1 - uxth r7, r7 -.L1597: +.L1639: + add r6, r6, #1 + uxth r6, r6 +.L1638: ldrh r3, [r4, #6] - cmp r3, r7 - bhi .L1600 + cmp r3, r6 + bhi .L1643 mov r0, r8 mov r1, #1 bl FtlFreeSysBlkQueueIn mov r3, #0 str r3, [r4, #32] -.L1591: - ldr r1, .L1603 +.L1632: + ldr r1, .L1645 movw r3, #3918 ldrh r2, [r4, #2] ldrh r3, [r1, r3] cmp r2, r3 - bcc .L1601 + bcc .L1642 mov r0, r4 bl ftl_map_blk_alloc_new_blk -.L1601: +.L1642: mov r0, #0 - ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1604: + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +.L1646: .align 2 -.L1603: +.L1645: .word .LANCHOR0 - .word .LC116 + .word .LC123 .word .LANCHOR2 .word .LANCHOR2+180 - .word .LC117 + .word .LC124 .fnend .size ftl_map_blk_gc, .-ftl_map_blk_gc .align 2 @@ -13903,60 +14356,60 @@ Ftl_write_map_blk_to_last_page: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 + ldr r3, .L1653 stmfd sp!, {r4, r5, r6, r7, r8, lr} .save {r4, r5, r6, r7, r8, lr} mov r4, r0 - ldr r5, .L1611 - ldr r7, [r0, #12] - ldr r8, [r0, #24] - ldr r6, [r5, #-2088] + ldr r6, [r3, #4040] + ldr r5, [r0, #12] cmp r6, #0 - bne .L1606 - ldrh r3, [r0, #0] - movw r2, #65535 - cmp r3, r2 - bne .L1607 + ldr r8, [r0, #24] + bne .L1648 + ldrh r2, [r0, #0] + movw r1, #65535 + cmp r2, r1 + bne .L1649 ldrh r3, [r0, #8] add r3, r3, #1 strh r3, [r0, #8] @ movhi bl FtlFreeSysBlkQueueOut - strh r0, [r7, #0] @ movhi + strh r0, [r5, #0] @ movhi ldr r3, [r4, #28] strh r6, [r4, #2] @ movhi add r3, r3, #1 strh r6, [r4, #0] @ movhi str r3, [r4, #28] - b .L1606 -.L1607: - mov r3, r3, asl #1 - ldr r2, [r0, #28] + b .L1648 +.L1649: + mov r2, r2, asl #1 + ldr r1, [r0, #28] + ldrh r7, [r5, r2] + ldr r5, .L1653+4 + ldrh r2, [r0, #2] + orr r2, r2, r7, asl #10 + str r2, [r5, #184] + ldr r2, [r5, #-960] + str r2, [r5, #188] + ldr r2, [r5, #-936] + str r2, [r5, #192] + str r1, [r2, #4] + ldr r1, .L1653+8 + strh r1, [r2, #8] @ movhi + ldrh r1, [r0, #4] + strh r7, [r2, #2] @ movhi + strh r1, [r2, #0] @ movhi + movw r2, #3918 + ldrh r2, [r3, r2] mov r1, #255 - ldrh r7, [r7, r3] - ldrh r3, [r0, #2] - orr r3, r3, r7, asl #10 - str r3, [r5, #184] - ldr r3, [r5, #-960] - str r3, [r5, #188] - ldr r3, [r5, #-936] - str r3, [r5, #192] - str r2, [r3, #4] - ldr r2, .L1611+4 - strh r2, [r3, #8] @ movhi - ldrh r2, [r0, #4] - strh r7, [r3, #2] @ movhi - strh r2, [r3, #0] @ movhi - movw r3, #3918 - ldr r2, .L1611+8 ldr r0, [r5, #-960] - ldrh r2, [r2, r3] mov r2, r2, asl #3 bl ftl_memset mov r3, r6 - b .L1608 -.L1610: + b .L1650 +.L1652: ldr r2, [r8, r3, asl #2] cmp r7, r2, lsr #10 - bne .L1609 + bne .L1651 add r6, r6, #1 ldr r2, [r5, #-960] uxth r6, r6 @@ -13965,16 +14418,16 @@ Ftl_write_map_blk_to_last_page: ldr r1, [r8, r3, asl #2] add r2, r2, r6, asl #3 str r1, [r2, #4] -.L1609: +.L1651: add r3, r3, #1 uxth r3, r3 -.L1608: +.L1650: ldrh r2, [r4, #6] cmp r2, r3 - bhi .L1610 + bhi .L1652 mov r1, #1 mov r3, #0 - ldr r0, .L1611+12 + ldr r0, .L1653+12 mov r2, r1 bl FlashProgPages ldrh r3, [r4, #2] @@ -13982,33 +14435,35 @@ Ftl_write_map_blk_to_last_page: add r3, r3, #1 strh r3, [r4, #2] @ movhi bl ftl_map_blk_gc -.L1606: +.L1648: mov r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L1612: +.L1654: .align 2 -.L1611: +.L1653: + .word .LANCHOR0 .word .LANCHOR2 .word -1291 - .word .LANCHOR0 .word .LANCHOR2+180 .fnend .size Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page .align 2 - .type FtlMapWritePage.part.14, %function -FtlMapWritePage.part.14: + .global FtlMapWritePage + .type FtlMapWritePage, %function +FtlMapWritePage: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - .save {r4, r5, r6, r7, r8, r9, sl, lr} + stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r4, r0 - ldr r5, .L1626 + ldr r8, .L1667 mov sl, r1 - ldr r8, .L1626+4 + ldr r5, .L1667+4 mov r9, r2 mov r6, #0 -.L1624: + mov fp, r8 +.L1666: ldr r3, [r5, #-1820] add r3, r3, #1 str r3, [r5, #-1820] @@ -14017,17 +14472,19 @@ FtlMapWritePage.part.14: ldrh r3, [r8, r3] sub r3, r3, #1 cmp r2, r3 - bge .L1615 + bge .L1657 ldrh r2, [r4, #0] movw r3, #65535 cmp r2, r3 - bne .L1616 -.L1615: + bne .L1658 +.L1657: mov r0, r4 bl Ftl_write_map_blk_to_last_page -.L1616: +.L1658: + ldr r1, [fp, #4040] + cmp r1, #0 + bne .L1659 ldrh r3, [r4, #0] - mov r1, #0 ldr r2, [r4, #12] ldr r0, [r5, #-936] mov r3, r3, asl #1 @@ -14042,7 +14499,7 @@ FtlMapWritePage.part.14: ldr r3, [r5, #192] mov r1, #1 ldr r2, [r4, #28] - ldr r0, .L1626+8 + ldr r0, .L1667+8 strh sl, [r3, #8] @ movhi str r2, [r3, #4] ldrh r2, [r4, #4] @@ -14057,8 +14514,8 @@ FtlMapWritePage.part.14: strh r2, [r4, #2] @ movhi ldr r3, [r5, #180] cmn r3, #1 - bne .L1617 - ldr r0, .L1626+12 + bne .L1660 + ldr r0, .L1667+12 add r6, r6, #1 ldr r1, [r5, #184] bl printk @@ -14070,58 +14527,38 @@ FtlMapWritePage.part.14: subls r3, r3, #1 strlsh r3, [r4, #2] @ movhi cmp r6, #3 - bls .L1624 - ldr r4, .L1626 + bls .L1666 + ldr r3, .L1667+4 mov r2, r6 - ldr r0, .L1626+16 - ldr r1, [r4, #184] + ldr r0, .L1667+16 + ldr r1, [r3, #184] bl printk - mov r3, #1 - str r3, [r4, #-2088] - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L1617: + ldr r3, .L1667 + mov r2, #1 + str r2, [r3, #4040] + b .L1659 +.L1660: cmp r3, #0 strneh r7, [r4, #40] @ movhi cmp r2, #1 - beq .L1624 + beq .L1666 cmp r3, #256 - beq .L1624 - ldr r3, .L1626 + beq .L1666 + ldr r3, .L1667+4 ldr r2, [r3, #184] ldr r3, [r4, #24] str r2, [r3, sl, asl #2] - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L1627: - .align 2 -.L1626: - .word .LANCHOR2 - .word .LANCHOR0 - .word .LANCHOR2+180 - .word .LC118 - .word .LC119 - .fnend - .size FtlMapWritePage.part.14, .-FtlMapWritePage.part.14 - .align 2 - .global FtlMapWritePage - .type FtlMapWritePage, %function -FtlMapWritePage: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, lr} - .save {r3, lr} - ldr r3, .L1630 - ldr r3, [r3, #-2088] - cmp r3, #0 - bne .L1629 - bl FtlMapWritePage.part.14 -.L1629: +.L1659: mov r0, #0 - ldmfd sp!, {r3, pc} -.L1631: + ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L1668: .align 2 -.L1630: +.L1667: + .word .LANCHOR0 .word .LANCHOR2 + .word .LANCHOR2+180 + .word .LC125 + .word .LC126 .fnend .size FtlMapWritePage, .-FtlMapWritePage .align 2 @@ -14134,7 +14571,7 @@ flush_l2p_region: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r4, #12 - ldr r5, .L1633 + ldr r5, .L1670 mul r4, r4, r0 sub r0, r5, #1088 ldr r2, [r5, #-1852] @@ -14149,9 +14586,9 @@ flush_l2p_region: bic r3, r3, #-2147483648 str r3, [r4, #4] ldmfd sp!, {r3, r4, r5, pc} -.L1634: +.L1671: .align 2 -.L1633: +.L1670: .word .LANCHOR2 .fnend .size flush_l2p_region, .-flush_l2p_region @@ -14162,53 +14599,52 @@ FtlMapBlkWriteDumpData: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, lr} - .save {r3, r4, r5, lr} + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} mov r4, r0 ldr r3, [r0, #36] - ldrh r5, [r0, #6] + ldrh r6, [r0, #6] cmp r3, #0 ldr r2, [r0, #24] - ldmeqfd sp!, {r3, r4, r5, pc} + ldmeqfd sp!, {r4, r5, r6, pc} mov r3, #0 str r3, [r0, #36] - ldr r3, .L1639 - ldr r1, [r3, #-2088] + ldr r3, .L1676 + ldr r1, [r3, #4040] cmp r1, #0 - ldmnefd sp!, {r3, r4, r5, pc} - sub r5, r5, #1 - ldr r0, [r3, #-956] - ldr r1, [r3, #-936] - uxth r5, r5 - str r0, [r3, #188] - str r1, [r3, #192] - ldr r2, [r2, r5, asl #2] + ldmnefd sp!, {r4, r5, r6, pc} + ldr r5, .L1676+4 + sub r6, r6, #1 + uxth r6, r6 + ldr r0, [r5, #-956] + ldr r1, [r5, #-936] + str r0, [r5, #188] + str r1, [r5, #192] + ldr r2, [r2, r6, asl #2] cmp r2, #0 - str r2, [r3, #184] - beq .L1637 + str r2, [r5, #184] + beq .L1674 mov r1, #1 - add r0, r3, #180 + add r0, r5, #180 mov r2, r1 bl FlashReadPages - b .L1638 -.L1637: - ldr r2, .L1639+4 - movw r3, #3926 + b .L1675 +.L1674: + movw r2, #3926 mov r1, #255 - ldrh r2, [r2, r3] + ldrh r2, [r3, r2] bl ftl_memset -.L1638: - ldr r3, .L1639 +.L1675: mov r0, r4 - mov r1, r5 - ldr r2, [r3, #188] - ldmfd sp!, {r3, r4, r5, lr} + mov r1, r6 + ldr r2, [r5, #188] + ldmfd sp!, {r4, r5, r6, lr} b FtlMapWritePage -.L1640: +.L1677: .align 2 -.L1639: - .word .LANCHOR2 +.L1676: .word .LANCHOR0 + .word .LANCHOR2 .fnend .size FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData .align 2 @@ -14218,7 +14654,7 @@ FtlVendorPartRead: .fnstart @ args = 0, pretend = 0, frame = 48 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L1652 + ldr r3, .L1689 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r9, r2 @@ -14233,20 +14669,20 @@ FtlVendorPartRead: mov r8, r0 cmp r1, r2 mvnhi fp, #0 - bhi .L1642 + bhi .L1679 mov r7, r0, lsr r7 mov fp, #0 - ldr r6, .L1652+4 + ldr r6, .L1689+4 mov r2, r7, asl #2 str r2, [sp, #0] - b .L1643 -.L1649: + b .L1680 +.L1686: ldr r3, [r6, #-904] mov r0, r8 ldr r2, [sp, #0] ldr sl, [r3, r2] movw r3, #3922 - ldr r2, .L1652 + ldr r2, .L1689 ldrh r4, [r2, r3] mov r1, r4 bl __aeabi_uidivmod @@ -14257,8 +14693,8 @@ FtlVendorPartRead: cmp r4, r5 uxthhi r4, r5 cmp sl, #0 - beq .L1645 - ldr r2, .L1652+4 + beq .L1682 + ldr r2, .L1689+4 mov r1, #1 add r0, sp, #12 str sl, [sp, #16] @@ -14273,29 +14709,29 @@ FtlVendorPartRead: moveq fp, r3 ldr r3, [r6, #180] cmp r3, #256 - bne .L1647 + bne .L1684 mov r1, r7 mov r2, sl - ldr r0, .L1652+8 + ldr r0, .L1689+8 bl printk - ldr r0, .L1652+12 + ldr r0, .L1689+12 mov r1, r7 ldr r2, [r6, #-952] bl FtlMapWritePage -.L1647: +.L1684: ldr r3, [sp, #4] mov r0, r9 ldr r1, [r6, #-952] mov r2, r4, asl #9 add r1, r1, r3, asl #9 bl memcpy - b .L1648 -.L1645: + b .L1685 +.L1682: mov r0, r9 mov r1, sl mov r2, r4, asl #9 bl ftl_memset -.L1648: +.L1685: ldr r3, [sp, #0] add r7, r7, #1 rsb r5, r4, r5 @@ -14303,19 +14739,19 @@ FtlVendorPartRead: add r9, r9, r4, asl #9 add r3, r3, #4 str r3, [sp, #0] -.L1643: +.L1680: cmp r5, #0 - bne .L1649 -.L1642: + bne .L1686 +.L1679: mov r0, fp add sp, sp, #52 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1653: +.L1690: .align 2 -.L1652: +.L1689: .word .LANCHOR0 .word .LANCHOR2 - .word .LC120 + .word .LC127 .word .LANCHOR2+248 .fnend .size FtlVendorPartRead, .-FtlVendorPartRead @@ -14329,25 +14765,26 @@ Ftl_load_ext_data: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r0, #0 - ldr r5, .L1658 + ldr r5, .L1695 mov r1, #1 - ldr r2, .L1658+4 + ldr r2, .L1695+4 bl FtlVendorPartRead - ldr r4, .L1658+8 + ldr r4, .L1695+8 ldr r3, [r5, #-1708] cmp r3, r4 - beq .L1655 - ldr r0, .L1658+4 + beq .L1692 + ldr r0, .L1695+4 mov r1, #0 mov r2, #512 bl ftl_memset str r4, [r5, #-1708] -.L1655: +.L1692: ldr r2, [r5, #-1708] - ldr r3, .L1658 + ldr r3, .L1695 cmp r2, r4 - bne .L1656 + bne .L1693 ldr r2, [r3, #-1620] + ldr r1, [r3, #-1676] str r2, [r3, #-1812] ldr r2, [r3, #-1616] str r2, [r3, #-1808] @@ -14361,8 +14798,8 @@ Ftl_load_ext_data: str r2, [r3, #-1820] ldr r2, [r3, #-1680] str r2, [r3, #-1792] - ldr r2, [r3, #-1676] - str r2, [r3, #-2076] + ldr r2, .L1695+12 + str r1, [r2, #4052] ldr r2, [r3, #-1672] str r2, [r3, #-1832] ldr r2, [r3, #-1668] @@ -14373,21 +14810,21 @@ Ftl_load_ext_data: str r2, [r3, #-1780] ldr r2, [r3, #-1648] str r2, [r3, #-1712] -.L1656: - ldr r4, .L1658 +.L1693: + ldr r4, .L1695 mov r3, #0 - ldr r5, .L1658+12 + ldr r5, .L1695+12 str r3, [r4, #-1000] ldr r2, [r4, #-1640] - ldr r3, .L1658+16 + ldr r3, .L1695+16 cmp r2, r3 - bne .L1657 + bne .L1694 mov r3, #1 - ldr r0, .L1658+20 + ldr r0, .L1695+20 str r3, [r5, #3840] - ldr r1, .L1658+24 + ldr r1, .L1695+24 bl printk -.L1657: +.L1694: movw r3, #3906 ldr r0, [r4, #-1796] ldrh r2, [r5, r3] @@ -14398,16 +14835,16 @@ Ftl_load_ext_data: bl __aeabi_uidiv str r0, [r4, #-1788] ldmfd sp!, {r3, r4, r5, pc} -.L1659: +.L1696: .align 2 -.L1658: +.L1695: .word .LANCHOR2 .word .LANCHOR2-1708 .word 1179929683 .word .LANCHOR0 .word 305432421 .word .LC78 - .word .LC121 + .word .LC128 .fnend .size Ftl_load_ext_data, .-Ftl_load_ext_data .align 2 @@ -14420,34 +14857,34 @@ FtlLoadEctTbl: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r0, #64 - ldr r4, .L1662 - ldr r5, .L1662+4 + ldr r4, .L1699 + ldr r5, .L1699+4 ldr r2, [r4, #-920] ldrh r1, [r4, r5] bl FtlVendorPartRead ldr r3, [r4, #-920] ldr r2, [r3, #0] - ldr r3, .L1662+8 + ldr r3, .L1699+8 cmp r2, r3 - beq .L1661 - ldr r1, .L1662+12 - ldr r0, .L1662+16 + beq .L1698 + ldr r1, .L1699+12 + ldr r0, .L1699+16 bl printk ldrh r2, [r4, r5] ldr r0, [r4, #-920] mov r1, #0 mov r2, r2, asl #9 bl ftl_memset -.L1661: +.L1698: mov r0, #0 ldmfd sp!, {r3, r4, r5, pc} -.L1663: +.L1700: .align 2 -.L1662: +.L1699: .word .LANCHOR2 .word -924 .word 1112818501 - .word .LC122 + .word .LC129 .word .LC78 .fnend .size FtlLoadEctTbl, .-FtlLoadEctTbl @@ -14458,7 +14895,7 @@ FtlVendorPartWrite: .fnstart @ args = 0, pretend = 0, frame = 56 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L1674 + ldr r3, .L1711 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r9, r2 @@ -14473,15 +14910,15 @@ FtlVendorPartWrite: mov r6, r0 cmp r1, r2 mvnhi r7, #0 - bhi .L1665 + bhi .L1702 mov r8, r0, lsr r8 mov r7, #0 - ldr sl, .L1674+4 + ldr sl, .L1711+4 mov ip, r8, asl #2 str ip, [sp, #8] - b .L1666 -.L1671: - ldr r1, .L1674 + b .L1703 +.L1708: + ldr r1, .L1711 movw r2, #3922 ldr ip, [sp, #8] mov r0, r6 @@ -14492,7 +14929,7 @@ FtlVendorPartWrite: str r3, [sp, #4] bl __aeabi_uidivmod ldr r3, [sp, #4] - ldr r2, .L1674+4 + ldr r2, .L1711+4 uxth r1, r1 str r1, [sp, #12] rsb r5, r1, fp @@ -14500,9 +14937,9 @@ FtlVendorPartWrite: cmp r5, r4 uxthhi r5, r4 cmp r3, #0 - beq .L1668 + beq .L1705 cmp r5, fp - beq .L1668 + beq .L1705 str r3, [sp, #24] mov r1, #1 ldr r3, [r2, #-952] @@ -14512,15 +14949,15 @@ FtlVendorPartWrite: mov r3, #0 str r3, [sp, #32] bl FlashReadPages - b .L1669 -.L1668: - ldr ip, .L1674 + b .L1706 +.L1705: + ldr ip, .L1711 movw r3, #3926 ldr r0, [r2, #-952] mov r1, #0 ldrh r2, [ip, r3] bl ftl_memset -.L1669: +.L1706: ldr r3, [sp, #12] mov fp, r5, asl #9 ldr r0, [sl, #-952] @@ -14531,7 +14968,7 @@ FtlVendorPartWrite: add r6, r6, r5 bl memcpy mov r1, r8 - ldr r0, .L1674+8 + ldr r0, .L1711+8 add r8, r8, #1 ldr r2, [sl, #-952] add r9, r9, fp @@ -14541,16 +14978,16 @@ FtlVendorPartWrite: str ip, [sp, #8] cmn r0, #1 moveq r7, r0 -.L1666: +.L1703: cmp r4, #0 - bne .L1671 -.L1665: + bne .L1708 +.L1702: mov r0, r7 add sp, sp, #60 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1675: +.L1712: .align 2 -.L1674: +.L1711: .word .LANCHOR0 .word .LANCHOR2 .word .LANCHOR2+248 @@ -14564,12 +15001,12 @@ Ftl_save_ext_data: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L1678 - ldr r2, .L1678+4 + ldr r3, .L1715 + ldr r2, .L1715+4 ldr r1, [r3, #-1708] cmp r1, r2 bxne lr - ldr r2, .L1678+8 + ldr r2, .L1715+8 mov r0, #0 mov r1, #1 str r2, [r3, #-1704] @@ -14587,7 +15024,8 @@ Ftl_save_ext_data: str r2, [r3, #-1688] ldr r2, [r3, #-1792] str r2, [r3, #-1680] - ldr r2, [r3, #-2076] + ldr r2, .L1715+12 + ldr r2, [r2, #4052] str r2, [r3, #-1676] ldr r2, [r3, #-1832] str r2, [r3, #-1672] @@ -14601,14 +15039,15 @@ Ftl_save_ext_data: str r2, [r3, #-1648] ldr r2, [r3, #-1000] str r2, [r3, #-1644] - ldr r2, .L1678+12 + ldr r2, .L1715+16 b FtlVendorPartWrite -.L1679: +.L1716: .align 2 -.L1678: +.L1715: .word .LANCHOR2 .word 1179929683 .word 1342177352 + .word .LANCHOR0 .word .LANCHOR2-1708 .fnend .size Ftl_save_ext_data, .-Ftl_save_ext_data @@ -14621,41 +15060,41 @@ FtlEctTblFlush: @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, lr} .save {r3, lr} - ldr r3, .L1687 - ldr r1, .L1687+4 + ldr r3, .L1724 + ldr r1, .L1724+4 ldr r3, [r3, #3840] cmp r3, #0 moveq r2, #32 - beq .L1681 + beq .L1718 ldr r2, [r1, #-1780] cmp r2, #29 movls r2, #4 movhi r2, #32 -.L1681: +.L1718: mov r3, #292 ldrh r1, [r1, r3] cmp r1, #31 addls r1, r1, #1 - ldrls r2, .L1687+4 + ldrls r2, .L1724+4 strlsh r1, [r2, r3] @ movhi movls r2, #1 cmp r0, #0 - ldr r3, .L1687+4 - bne .L1683 + ldr r3, .L1724+4 + bne .L1720 ldr r1, [r3, #-920] ldr r0, [r1, #20] ldr r1, [r1, #16] add r2, r2, r0 cmp r1, r2 - bcc .L1684 -.L1683: + bcc .L1721 +.L1720: ldr r2, [r3, #-920] mov r0, #64 ldr r1, [r2, #16] str r1, [r2, #20] - ldr r1, .L1687+8 + ldr r1, .L1724+8 str r1, [r2, #0] - ldr r1, .L1687+12 + ldr r1, .L1724+12 ldr r2, [r3, #-920] ldrh r1, [r3, r1] mov r3, r1, asl #9 @@ -14667,12 +15106,12 @@ FtlEctTblFlush: str r3, [r2, #4] bl FtlVendorPartWrite bl Ftl_save_ext_data -.L1684: +.L1721: mov r0, #0 ldmfd sp!, {r3, pc} -.L1688: +.L1725: .align 2 -.L1687: +.L1724: .word .LANCHOR0 .word .LANCHOR2 .word 1112818501 @@ -14680,3088 +15119,2622 @@ FtlEctTblFlush: .fnend .size FtlEctTblFlush, .-FtlEctTblFlush .align 2 - .type ftl_load_l2p_region, %function -ftl_load_l2p_region: + .global FtlMapTblRecovery + .type FtlMapTblRecovery, %function +FtlMapTblRecovery: .fnstart - @ args = 0, pretend = 0, frame = 0 + @ args = 0, pretend = 0, frame = 24 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, r6, r7, lr} - .save {r3, r4, r5, r6, r7, lr} - mov r5, r0 - ldr r4, .L1693 - mov r7, #12 - ldr r3, [r4, #-1032] - ldr r6, [r3, r0, asl #2] - cmp r6, #0 - bne .L1690 - mul r7, r7, r1 - ldr r3, [r4, #-1852] - ldr r2, .L1693+4 - mov r1, #255 - add r3, r3, r7 - ldr r0, [r3, #8] - movw r3, #3926 - ldrh r2, [r2, r3] + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .pad #28 + sub sp, sp, #28 + ldr r3, [r0, #16] + mov r4, r0 + ldr r7, [r0, #24] + mov r1, #0 + ldrh r8, [r0, #6] + mov fp, #0 + str r3, [sp, #16] + ldrh r3, [r0, #8] + mov sl, r7 + ldr r9, [r0, #12] + mov r2, r8, asl #2 + mov r0, r7 + str r3, [sp, #8] bl ftl_memset - ldr r3, [r4, #-1852] - strh r5, [r3, r7] @ movhi - ldr r3, [r4, #-1852] - add r7, r3, r7 - str r6, [r7, #4] - b .L1691 -.L1690: - mul r7, r7, r1 - ldr r3, [r4, #-1852] + ldr r3, .L1747 + str fp, [r4, #32] + str fp, [r4, #28] + ldr r2, [r3, #-960] + ldr r5, [r3, #-936] + str r2, [r3, #188] + str r5, [r3, #192] + mvn r3, #0 + strh r3, [r4, #0] @ movhi + strh r3, [r4, #2] @ movhi + mov r3, #1 + str r3, [r4, #36] + ldr r3, [sp, #8] + sub r3, r3, #1 + str r3, [sp, #12] + ldr r3, .L1747+4 + b .L1727 +.L1741: + ldr r0, [sp, #12] + cmp r2, r0 + mov r2, r2, asl #1 + bne .L1728 + ldrh r0, [r9, r2] + mov r1, #1 + add ip, r9, r2 + str ip, [sp, #4] + bl FtlGetLastWrittenPage + ldr r1, [sp, #12] + ldr r2, [sp, #16] + mov r7, sl + strh fp, [r4, #0] @ movhi + mov sl, #0 + ldr ip, [sp, #4] + ldr r6, .L1747 + mov fp, ip + uxth r0, r0 + add r3, r0, #1 + strh r3, [r4, #2] @ movhi + ldr r3, [r2, r1, asl #2] + sxth r9, r0 + add r9, r9, #1 + str r3, [r4, #28] + b .L1729 +.L1732: + ldrh r2, [fp, #0] mov r1, #1 - add r0, r4, #180 + ldr r0, .L1747+8 + orr r3, r3, r2, asl #10 mov r2, r1 - str r6, [r4, #184] - add r3, r3, r7 - ldr r3, [r3, #8] - str r3, [r4, #188] - ldr r3, [r4, #-936] - str r3, [r4, #192] + str r3, [r6, #184] bl FlashReadPages - ldr r3, [r4, #180] - cmp r3, #256 - bne .L1692 - mov r2, r6 - mov r1, r5 - ldr r0, .L1693+8 - mov r6, r6, lsr #10 - bl printk - ldr r3, .L1693+12 - sub r0, r4, #1088 - mov r1, r5 - strh r6, [r4, r3] @ movhi - ldr r3, [r4, #-1852] - add r3, r3, r7 - ldr r2, [r3, #8] - bl FtlMapWritePage -.L1692: - ldr r3, .L1693 - mov r1, #0 - ldr r3, [r3, #-1852] - add r2, r3, r7 - str r1, [r2, #4] - strh r5, [r3, r7] @ movhi -.L1691: - mov r0, #0 - ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L1694: - .align 2 -.L1693: - .word .LANCHOR2 - .word .LANCHOR0 - .word .LC123 - .word -1048 - .fnend - .size ftl_load_l2p_region, .-ftl_load_l2p_region - .align 2 - .global log2phys - .type log2phys, %function -log2phys: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} - .save {r3, r4, r5, r6, r7, r8, sl, lr} - mov r8, r2 - ldr r3, .L1704 - movw r2, #3924 - mov r4, r1 - ldrh r7, [r3, r2] - mvn r2, #0 - add r7, r7, #7 - mov r6, r0, lsr r7 - bic r7, r0, r2, asl r7 - movw r2, #3954 - ldrh r2, [r3, r2] + ldr r3, [r6, #180] + cmn r3, #1 + ldreqh r3, [fp, #0] + streqh r3, [r4, #40] @ movhi + beq .L1731 + ldrh r3, [r5, #8] + cmp r3, r8 + bcs .L1731 + ldrh r2, [r4, #4] + ldrh r1, [r5, #0] + cmp r1, r2 + ldreq r2, [r6, #184] + streq r2, [r7, r3, asl #2] +.L1731: + add sl, sl, #1 + uxth sl, sl +.L1729: + sxth r3, sl + cmp r3, r9 + blt .L1732 + b .L1733 +.L1728: + ldr r6, .L1747 + movw r7, #3918 + add r0, r9, r2 + str r0, [sp, #20] + add r0, r6, #180 + ldr r1, [r6, #-960] + str r1, [r6, #188] + ldrh r1, [r9, r2] + ldrh r2, [r3, r7] + sub r2, r2, #1 + orr r2, r2, r1, asl #10 + mov r1, #1 + str r2, [r6, #184] + mov r2, r1 + str r3, [sp, #4] + bl FlashReadPages + ldr r2, [r6, #180] + ldr r3, [sp, #4] + cmn r2, #1 + beq .L1744 + ldrh r1, [r5, #0] + ldrh r2, [r4, #4] + cmp r1, r2 + bne .L1744 + ldrh r1, [r5, #8] + movw r2, #64245 + cmp r1, r2 + bne .L1744 + b .L1745 +.L1737: + ldr r0, [r6, #-960] + mov ip, r1, asl #3 + add r2, r2, #1 + ldr r1, [r0, r1, asl #3] + uxth r2, r2 + uxth r1, r1 + cmp r1, r8 + addcc r0, r0, ip + ldrcc r0, [r0, #4] + strcc r0, [sl, r1, asl #2] + b .L1735 +.L1745: + mov r2, #0 +.L1735: + ldrh r0, [r3, r7] + sxth r1, r2 + sub r0, r0, #1 + cmp r1, r0 + blt .L1737 + b .L1738 +.L1740: + ldr r0, [sp, #20] + ldrh r1, [r0, #0] + ldr r0, .L1747+8 + orr r2, r2, r1, asl #10 + mov r1, #1 + str r2, [r7, #184] + mov r2, r1 + str r3, [sp, #4] + bl FlashReadPages + ldr r2, [r7, #180] + ldr r3, [sp, #4] + cmn r2, #1 + beq .L1739 + ldrh r2, [r5, #8] + cmp r2, r8 + bcs .L1739 + ldrh r1, [r4, #4] + ldrh r0, [r5, #0] + cmp r0, r1 + ldreq r1, [r7, #184] + streq r1, [sl, r2, asl #2] +.L1739: + add r6, r6, #1 uxth r6, r6 - ldr r3, .L1704+4 - uxth r7, r7 - ldr sl, [r3, #-1852] - mov r3, #0 - mov r5, r3 - b .L1696 -.L1702: - add r3, r3, #12 - add r1, sl, r3 - ldrh r1, [r1, #-12] - cmp r1, r6 - bne .L1697 -.L1698: - cmp r8, #0 - ldr r3, .L1704+4 - mov r2, #12 - bne .L1699 - ldr r3, [r3, #-1852] - mla r2, r2, r5, r3 - ldr r3, [r2, #8] - ldr r3, [r3, r7, asl #2] - str r3, [r4, #0] - b .L1700 -.L1699: - mul r2, r2, r5 - ldr r1, [r3, #-1852] - ldr r0, [r4, #0] - add r1, r1, r2 - ldr r1, [r1, #8] - str r0, [r1, r7, asl #2] - ldr r1, [r3, #-1852] - add r2, r1, r2 - ldr r1, [r2, #4] - orr r1, r1, #-2147483648 - str r1, [r2, #4] - ldr r2, .L1704+8 - strh r6, [r3, r2] @ movhi -.L1700: - ldr r3, .L1704+4 - mov r2, #12 + b .L1746 +.L1744: + ldr r7, .L1747 + mov r6, #0 +.L1746: + movw r1, #3918 + sxth r2, r6 + ldrh r1, [r3, r1] + cmp r2, r1 + blt .L1740 +.L1738: + add fp, fp, #1 + uxth fp, fp +.L1727: + ldr r1, [sp, #8] + sxth r2, fp + cmp r2, r1 + blt .L1741 +.L1733: + mov r0, r4 + bl ftl_free_no_use_map_blk + ldr r1, .L1747+4 + movw r3, #3918 + ldrh r2, [r4, #2] + ldrh r3, [r1, r3] + cmp r2, r3 + bne .L1742 + mov r0, r4 + bl ftl_map_blk_alloc_new_blk +.L1742: + mov r0, r4 + bl ftl_map_blk_gc + mov r0, r4 + bl ftl_map_blk_gc mov r0, #0 - ldr r3, [r3, #-1852] - mla r5, r2, r5, r3 - ldr r3, [r5, #4] - cmn r3, #1 - addne r3, r3, #1 - strne r3, [r5, #4] - ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L1697: - add r5, r5, #1 - uxth r5, r5 -.L1696: - cmp r5, r2 - bne .L1702 - bl select_l2p_ram_region - mov r3, #12 - mul r3, r3, r0 - mov r5, r0 - add r2, sl, r3 - ldrh r1, [sl, r3] - movw r3, #65535 - cmp r1, r3 - beq .L1703 - ldr r3, [r2, #4] - cmp r3, #0 - bge .L1703 - bl flush_l2p_region -.L1703: - mov r0, r6 - mov r1, r5 - bl ftl_load_l2p_region - b .L1698 -.L1705: + add sp, sp, #28 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L1748: .align 2 -.L1704: - .word .LANCHOR0 +.L1747: .word .LANCHOR2 - .word -1848 + .word .LANCHOR0 + .word .LANCHOR2+180 .fnend - .size log2phys, .-log2phys + .size FtlMapTblRecovery, .-FtlMapTblRecovery .align 2 - .global FtlReUsePrevPpa - .type FtlReUsePrevPpa, %function -FtlReUsePrevPpa: + .global FtlLoadMapInfo + .type FtlLoadMapInfo, %function +FtlLoadMapInfo: .fnstart - @ args = 0, pretend = 0, frame = 8 + @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, lr} - .save {r0, r1, r2, r4, r5, r6, r7, lr} - mov r7, r0 - ubfx r0, r1, #10, #16 - str r1, [sp, #4] - bl P2V_block_in_plane - ldr r3, .L1712 - ldr r1, [r3, #-2016] - mov r5, r0, asl #1 - ldrh r2, [r1, r5] - cmp r2, #0 - addne r2, r2, #1 - strneh r2, [r1, r5] @ movhi - bne .L1708 - ldr r4, [r3, #-2004] - cmp r4, #0 - beq .L1708 - ldr r1, .L1712+4 - mov ip, #6 - ldrh lr, [r3, r1] - ldr r3, [r3, #-2024] - ldr r1, .L1712+8 - rsb r4, r3, r4 - mov r4, r4, asr #1 - mul r4, r1, r4 - movw r1, #65535 - uxth r4, r4 - b .L1709 -.L1711: - cmp r4, r0 - bne .L1710 - mov r1, r4 - ldr r0, .L1712+12 - bl List_remove_node - ldr r6, .L1712 - ldr r3, .L1712+4 - mov r0, r4 - ldrh r2, [r6, r3] - sub r2, r2, #1 - strh r2, [r6, r3] @ movhi - bl INSERT_DATA_LIST - ldr r3, [r6, #-2016] - ldrh r2, [r3, r5] - add r2, r2, #1 - strh r2, [r3, r5] @ movhi - b .L1708 -.L1710: - mul r4, ip, r4 - ldrh r4, [r3, r4] - cmp r4, r1 - beq .L1708 - add r2, r2, #1 - uxth r2, r2 -.L1709: - cmp r2, lr - bne .L1711 -.L1708: - mov r0, r7 - add r1, sp, #4 - mov r2, #1 - bl log2phys - ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, pc} -.L1713: + stmfd sp!, {r3, lr} + .save {r3, lr} + bl FtlL2PDataInit + ldr r0, .L1750 + bl FtlMapTblRecovery + mov r0, #0 + ldmfd sp!, {r3, pc} +.L1751: .align 2 -.L1712: - .word .LANCHOR2 - .word -2000 - .word -1431655765 - .word .LANCHOR2-2004 +.L1750: + .word .LANCHOR2-1088 .fnend - .size FtlReUsePrevPpa, .-FtlReUsePrevPpa + .size FtlLoadMapInfo, .-FtlLoadMapInfo .align 2 - .type FtlReadRefresh.part.15, %function -FtlReadRefresh.part.15: + .global FtlLoadVonderInfo + .type FtlLoadVonderInfo, %function +FtlLoadVonderInfo: .fnstart - @ args = 0, pretend = 0, frame = 40 + @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, lr} - .save {r4, r5, r6, lr} - .pad #40 - sub sp, sp, #40 - ldr r4, .L1722 - ldr r6, .L1722+4 - ldr r2, [r4, #-1624] - ldr r3, [r6, #3976] - cmp r2, r3 - bcs .L1715 - mov r5, #2048 -.L1718: - ldr r0, [r4, #-1624] - ldr r3, [r6, #3976] - cmp r0, r3 - bcs .L1720 - mov r1, sp - mov r2, #0 - bl log2phys - ldr r0, [sp, #0] - ldr r3, [r4, #-1624] - cmn r0, #1 - add r3, r3, #1 - str r3, [r4, #-1624] - beq .L1717 - str r0, [sp, #8] - add r0, sp, #40 - mov r2, #0 - mov r1, #1 - str r2, [r0, #-36]! - str r3, [sp, #20] - str r2, [sp, #12] - str r2, [sp, #16] - bl FlashReadPages - ldr r3, [sp, #4] - cmp r3, #256 - bne .L1720 - ldr r0, [sp, #0] - ubfx r0, r0, #10, #16 - bl P2V_block_in_plane - bl FtlGcRefreshBlock - b .L1720 -.L1717: - subs r5, r5, #1 - bne .L1718 - b .L1716 -.L1715: - ldr r3, [r4, #-1836] + stmfd sp!, {r3, lr} + .save {r3, lr} + mov r2, #3936 + ldr r3, .L1753 + ldr r0, .L1753+4 + ldrh r1, [r3, r2] + movw r2, #258 + strh r1, [r0, r2] @ movhi + ldr r2, .L1753+8 + strh r2, [r0, #252] @ movhi + movw r2, #3962 + ldrh r1, [r3, r2] + mov r2, #256 + strh r1, [r0, r2] @ movhi + movw r2, #3938 + ldrh r2, [r3, r2] + ldr r3, [r3, #3964] + strh r2, [r0, #254] @ movhi + mvn r2, #0 + str r3, [r0, #260] + ldr r3, [r0, #-908] + str r3, [r0, #264] + ldr r3, [r0, #-912] + str r3, [r0, #268] + ldr r3, [r0, #-904] + str r3, [r0, #272] + mov r3, #288 + strh r2, [r0, r3] @ movhi + add r0, r0, #248 + bl FtlMapTblRecovery mov r0, #0 - str r0, [r4, #-1628] - str r0, [r4, #-1624] - str r3, [r4, #-1632] - b .L1716 -.L1720: - mvn r0, #0 -.L1716: - add sp, sp, #40 - ldmfd sp!, {r4, r5, r6, pc} -.L1723: + ldmfd sp!, {r3, pc} +.L1754: .align 2 -.L1722: - .word .LANCHOR2 +.L1753: .word .LANCHOR0 + .word .LANCHOR2 + .word -3962 .fnend - .size FtlReadRefresh.part.15, .-FtlReadRefresh.part.15 + .size FtlLoadVonderInfo, .-FtlLoadVonderInfo .align 2 - .global FtlReadRefresh - .type FtlReadRefresh, %function -FtlReadRefresh: + .global FlashLoadFactorBbt + .type FlashLoadFactorBbt, %function +FlashLoadFactorBbt: .fnstart - @ args = 0, pretend = 0, frame = 0 + @ args = 0, pretend = 0, frame = 48 @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - ldr r3, .L1731 - ldr r2, [r3, #-1628] - cmp r2, #0 - beq .L1725 - b FtlReadRefresh.part.15 -.L1725: - ldr r2, .L1731+4 - ldr r0, [r3, #-1784] - ldr r1, [r2, #3840] - ldrb r2, [r2, #928] @ zero_extendqisi2 - cmp r2, #0 - ldr r2, [r3, #-1836] - addeq r0, r1, r0, lsr #10 - moveq r1, #33554432 - movne r0, #4194304 - moveq r0, r1, asr r0 - ldr r1, [r3, #-1632] - add r3, r2, #1048576 - cmp r1, r3 - bhi .L1727 - add r1, r0, r1 - cmp r1, r2 - bcc .L1727 - ldr r3, .L1731 - ldrb r3, [r3, #-2044] @ zero_extendqisi2 - cmp r3, #0 - bne .L1728 -.L1727: - ldr r3, .L1731 - mov r1, #1 - str r2, [r3, #-1632] - str r1, [r3, #-1628] + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + movw r2, #3062 + ldr r9, .L1764 + movw r3, #3060 + ldr r4, .L1764+4 + .pad #52 + sub sp, sp, #52 mov r1, #0 - str r1, [r3, #-1624] -.L1728: - mov r0, #0 - bx lr -.L1732: + mvn r7, #0 + ldrh r3, [r9, r3] + add r0, r4, #232 + ldrh r8, [r9, r2] + mov r2, #16 + mov r6, #0 + mul r8, r8, r3 + bl ftl_memset + ldr r3, [r4, #228] + str r6, [sp, #20] + mov r4, r6 + str r3, [sp, #24] + uxth r8, r8 + add r3, r8, r7 + uxth r3, r3 + str r3, [sp, #4] + b .L1756 +.L1762: + ldr r5, [sp, #4] + sub r3, r8, #12 + mul fp, r8, r4 + ldr sl, .L1764+4 + b .L1757 +.L1760: + add r2, fp, r5 + mov r1, #1 + add r0, sp, #12 + str r3, [sp, #0] + mov r2, r2, asl #10 + str r2, [sp, #16] + mov r2, r1 + bl FlashReadPages + ldr r2, [sp, #12] + ldr r3, [sp, #0] + cmn r2, #1 + beq .L1758 + ldr r2, [sl, #228] + ldrh r1, [r2, #0] + movw r2, #61664 + cmp r1, r2 + bne .L1758 + ldr r0, .L1764+8 + mov r1, r4 + mov r2, r5 + add r6, r6, #1 + bl printk + ldr r3, .L1764+4 + uxth r6, r6 + add r3, r3, r4, asl #1 + strh r5, [r3, #232] @ movhi + b .L1759 +.L1758: + sub r5, r5, #1 + uxth r5, r5 +.L1757: + cmp r5, r3 + bgt .L1760 +.L1759: + ldrb r3, [r9, #3762] @ zero_extendqisi2 + add r4, r4, #1 + cmp r3, r6 + uxtb r4, r4 + moveq r7, #0 +.L1756: + ldrb r3, [r9, #3762] @ zero_extendqisi2 + cmp r3, r4 + bhi .L1762 + mov r0, r7 + add sp, sp, #52 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L1765: .align 2 -.L1731: - .word .LANCHOR2 +.L1764: .word .LANCHOR0 + .word .LANCHOR2 + .word .LC130 .fnend - .size FtlReadRefresh, .-FtlReadRefresh + .size FlashLoadFactorBbt, .-FlashLoadFactorBbt .align 2 - .global FtlMapTblRecovery - .type FtlMapTblRecovery, %function -FtlMapTblRecovery: + .global dump_map_info + .type dump_map_info, %function +dump_map_info: .fnstart - @ args = 0, pretend = 0, frame = 24 + @ args = 0, pretend = 0, frame = 8 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + mov r3, #3856 + ldr r5, .L1779 .pad #36 sub sp, sp, #36 - ldr r3, [r0, #16] - mov r4, r0 - ldrh r8, [r0, #6] - mov r1, #0 - ldr fp, [r0, #24] - mov r9, #0 - str r3, [sp, #24] - ldrh r3, [r0, #8] - mov r2, r8, asl #2 - ldr r7, [r0, #12] - mov r0, fp - str r3, [sp, #16] - bl ftl_memset - ldr r3, .L1768 - mov sl, r7 - str r9, [r4, #32] - str r9, [r4, #28] - ldr r2, [r3, #-960] - ldr r5, [r3, #-936] - str r2, [r3, #188] - str r5, [r3, #192] - mvn r3, #0 - strh r3, [r4, #0] @ movhi - strh r3, [r4, #2] @ movhi - mov r3, #1 - str r3, [r4, #36] - ldr r3, [sp, #16] - sub r3, r3, #1 - str r3, [sp, #20] - ldr r3, .L1768+4 - b .L1734 -.L1748: - ldr r0, [sp, #20] - cmp r2, r0 - mov r2, r2, asl #1 - bne .L1735 - ldrh r0, [sl, r2] - mov r1, #1 - add r3, sl, r2 - str r3, [sp, #16] - bl FtlGetLastWrittenPage - ldr r1, [sp, #20] - ldr r2, [sp, #24] - mov r7, sl - strh r9, [r4, #0] @ movhi - mov sl, #0 - ldr r6, .L1768 - uxth r0, r0 - add r3, r0, #1 - strh r3, [r4, #2] @ movhi - ldr r3, [r2, r1, asl #2] - sxth r9, r0 - add r9, r9, #1 - str r3, [r4, #28] - b .L1736 -.L1739: - ldr r0, [sp, #16] - mov r1, #1 - ldrh r2, [r0, #0] - ldr r0, .L1768+8 - orr r3, r3, r2, asl #10 - mov r2, r1 - str r3, [r6, #184] - bl FlashReadPages - ldr r3, [r6, #180] - cmn r3, #1 - ldreq r1, [sp, #16] - ldreqh r3, [r1, #0] - streqh r3, [r4, #40] @ movhi - beq .L1738 - ldrh r3, [r5, #8] - cmp r3, r8 - bcs .L1738 - ldrh r2, [r4, #4] - ldrh r1, [r5, #0] - cmp r1, r2 - ldreq r2, [r6, #184] - streq r2, [fp, r3, asl #2] -.L1738: - add sl, sl, #1 - uxth sl, sl -.L1736: - sxth r3, sl - cmp r3, r9 - blt .L1739 - b .L1740 -.L1735: - ldr r6, .L1768 - movw r7, #3918 - add r0, sl, r2 + ldrh r6, [r5, r3] + b .L1767 +.L1769: + add r3, r5, r7 + mov r1, r6 + ldrb r0, [r3, #3874] @ zero_extendqisi2 + bl V2P_block str r0, [sp, #28] - add r0, r6, #180 - ldr r1, [r6, #-960] - str r1, [r6, #188] - ldrh r1, [sl, r2] - ldrh r2, [r3, r7] - sub r2, r2, #1 - orr r2, r2, r1, asl #10 - mov r1, #1 - str r2, [r6, #184] - mov r2, r1 - str r3, [sp, #12] - bl FlashReadPages - ldr r2, [r6, #180] - ldr r3, [sp, #12] - cmn r2, #1 - beq .L1761 - ldrh r1, [r5, #0] - ldrh r2, [r4, #4] - cmp r1, r2 - bne .L1761 - ldrh r1, [r5, #8] - movw r2, #64245 - cmp r1, r2 - bne .L1761 - b .L1762 -.L1744: - ldr r0, [r6, #-960] - mov ip, r1, asl #3 - add r2, r2, #1 - ldr r1, [r0, r1, asl #3] - uxth r2, r2 - uxth r1, r1 - cmp r1, r8 - addcc r0, r0, ip - ldrcc r0, [r0, #4] - strcc r0, [fp, r1, asl #2] - b .L1742 -.L1762: - mov r2, #0 -.L1742: - ldrh r0, [r3, r7] - sxth r1, r2 - sub r0, r0, #1 - cmp r1, r0 - blt .L1744 - b .L1745 -.L1747: - ldr r0, [sp, #28] - ldrh r1, [r0, #0] - ldr r0, .L1768+8 - orr r2, r2, r1, asl #10 - mov r1, #1 - str r2, [r7, #184] - mov r2, r1 - str r3, [sp, #12] + bl FtlBbmIsBadBlock + ldr r3, [sp, #28] + cmp r0, #0 + bne .L1768 + ldr r2, [r8, #-972] + mov r3, r3, asl #10 + mla r2, r9, r4, r2 + str r3, [r2, #4] + ldr r3, [r8, #-1172] + str r3, [r2, #8] + ldrh r3, [r5, sl] + mul r3, r3, r4 + add r4, r4, #1 + uxth r4, r4 + add r1, r3, #3 + cmp r3, #0 + movlt r3, r1 + ldr r1, [r8, #-1168] + bic r3, r3, #3 + add r3, r1, r3 + str r3, [r2, #12] +.L1768: + add r7, r7, #1 + uxth r7, r7 + b .L1772 +.L1777: + ldr r8, .L1779+4 + mov r4, #0 + mov r7, r4 + movw fp, #3848 + mov r9, #36 + movw sl, #3928 +.L1772: + ldrh r3, [r5, fp] + cmp r3, r7 + bhi .L1769 + cmp r4, #0 + beq .L1770 + ldr sl, .L1779+4 + mov r1, r4 + mov r2, #1 + mov r7, #0 + mov r8, r7 + ldr r0, [sl, #-972] bl FlashReadPages - ldr r2, [r7, #180] - ldr r3, [sp, #12] - cmn r2, #1 - beq .L1746 - ldrh r2, [r5, #8] - cmp r2, r8 - bcs .L1746 - ldrh r1, [r4, #4] - ldrh r0, [r5, #0] - cmp r0, r1 - ldreq r1, [r7, #184] - streq r1, [fp, r2, asl #2] -.L1746: +.L1771: + ldr r1, [sl, #-972] + add r8, r8, #1 + add r1, r1, r7 + uxth r8, r8 + add r7, r7, #36 + ldr r3, [r1, #12] + ldr r2, [r1, #4] + ldr r1, [r1, #8] + ldr r0, [r3, #4] + str r0, [sp, #0] + ldr r0, [r3, #8] + str r0, [sp, #4] + ldr r0, [r3, #12] + str r0, [sp, #8] + ldr r0, [r1, #0] + str r0, [sp, #12] + ldr r1, [r1, #4] + ldr r0, .L1779+8 + str r1, [sp, #16] + ubfx r1, r2, #10, #16 + ldr r3, [r3, #0] + bl printk + cmp r8, r4 + bne .L1771 +.L1770: add r6, r6, #1 uxth r6, r6 - b .L1764 -.L1761: - ldr r7, .L1768 - mov r6, #0 -.L1764: - movw r1, #3918 - sxth r2, r6 - ldrh r1, [r3, r1] - cmp r2, r1 - blt .L1747 -.L1745: - add r9, r9, #1 - uxth r9, r9 -.L1734: - ldr r1, [sp, #16] - sxth r2, r9 - cmp r2, r1 - blt .L1748 - mov r7, sl -.L1740: - ldr r3, .L1768+12 - cmp r4, r3 - bne .L1749 - ldr r9, .L1768+4 - movw r3, #3960 - ldrh r3, [r9, r3] - cmp r3, #0 - addne r5, r4, #1088 - movne r8, #0 - movne sl, r4 - bne .L1750 - b .L1749 -.L1757: - ldr r3, [r5, #-900] - mov r4, r8, asl #2 - ldr r2, [r3, r8, asl #2] - sub r1, r2, #1 - cmn r1, #3 - bhi .L1751 - ldr r1, [r5, #-1032] - ldr r1, [r1, r8, asl #2] - cmp r2, r1 - beq .L1751 - ldr r2, [r5, #-960] - mov r1, #1 - ldr r6, [r5, #-936] - ldr r0, .L1768+8 - str r2, [r5, #188] - mov r2, r1 - str r6, [r5, #192] - ldr r3, [r3, r4] - str r3, [r5, #184] - bl FlashReadPages - ldr r3, [r5, #180] - cmn r3, #1 - beq .L1751 - ldr r0, .L1768+16 - ldrh r2, [r6, #0] - ldrh r3, [r5, r0] - cmp r2, r3 - bne .L1751 - ldr r3, [r5, #-1032] - ldr fp, [r6, #4] - ldr r2, [r3, r4] - str r2, [r5, #184] - ldr r3, [r3, r4] - cmp r3, #0 - streq r3, [r6, #4] - beq .L1753 +.L1767: + movw r2, #3858 + ldrh r3, [r5, r2] + cmp r3, r6 + bhi .L1777 + mov r5, #0 + ldr r4, .L1779+4 + ldr sl, .L1779+12 + b .L1773 +.L1774: + ldr r2, [r4, #-1040] mov r1, #1 - ldr r0, .L1768+8 + ldr r0, .L1779+16 + add r6, r6, #1 + ldrh r2, [r2, r7] + uxth r6, r6 + orr r3, r3, r2, asl #10 mov r2, r1 + str r3, [r4, #184] bl FlashReadPages -.L1753: - ldr r1, [r6, #4] - cmp fp, r1 - bls .L1751 - ldr r2, [r5, #-900] - ldr r3, [r5, #-1032] - ldr r0, .L1768+20 - str r1, [sp, #0] - ldr r1, [r2, r4] - ldr r2, [r3, r4] - mov r3, fp + ldr r3, [r4, #192] + ldr r1, [r4, #-1040] + ldr r2, [r4, #188] + ldr r0, [r3, #0] + ldrh r1, [r1, r7] + str r0, [sp, #0] + ldr r0, [r3, #4] + str r0, [sp, #4] + ldr r0, [r3, #8] + str r0, [sp, #8] + ldr r3, [r3, #12] + ldr r0, .L1779+20 + str r3, [sp, #12] + ldr r3, [r2, #0] + str r3, [sp, #16] + ldr r3, [r2, #4] + str r3, [sp, #20] + ldr r2, [r4, #180] + ldr r3, [r4, #184] bl printk - ldr r3, [r5, #-900] - ldr r2, [r3, r4] - ldr r3, [r5, #-1032] - str r2, [r3, r4] - mov r2, #0 - ldr r3, [r5, #-900] - ldr r0, [r3, r4] - ldr r3, .L1768+24 - ubfx r0, r0, #10, #16 - ldrh r3, [r5, r3] - b .L1754 -.L1755: - mov r1, r1, asl #1 - ldrh r1, [r7, r1] - cmp r1, r0 - beq .L1751 - add r2, r2, #1 - uxth r2, r2 -.L1754: - sxth r1, r2 - cmp r1, r3 - blt .L1755 - b .L1766 -.L1767: - mov r3, r3, asl #1 - strh r0, [r7, r3] @ movhi - ldr r3, .L1768+24 - ldrh r2, [r5, r3] - add r2, r2, #1 - strh r2, [r5, r3] @ movhi - bl remove_from_free_sys_Queue -.L1751: - add r8, r8, #1 -.L1750: - mov r3, #3952 - ldrh r3, [r9, r3] - cmp r8, r3 - bcc .L1757 - mov r4, sl -.L1749: - mov r0, r4 - bl ftl_free_no_use_map_blk - ldr r1, .L1768+4 - movw r3, #3918 - ldrh r2, [r4, #2] - ldrh r3, [r1, r3] - cmp r2, r3 - bne .L1758 - mov r0, r4 - bl ftl_map_blk_alloc_new_blk -.L1758: - mov r0, r4 - bl ftl_map_blk_gc - mov r0, r4 - bl ftl_map_blk_gc - mov r0, #0 - add sp, sp, #36 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1766: - ldr r2, [r9, #3944] +.L1776: + movw r2, #3918 + sxth r3, r6 + ldrh r2, [r8, r2] cmp r3, r2 - bcs .L1751 - b .L1767 -.L1769: + blt .L1774 + add r5, r5, #1 + uxth r5, r5 +.L1773: + ldrh r3, [r4, sl] + sxth r7, r5 + ldr r6, .L1779+4 + cmp r7, r3 + movlt r7, r7, asl #1 + movlt r6, #0 + ldrlt r8, .L1779 + blt .L1776 +.L1775: + ldr r4, .L1779 + mov r5, #3952 + ldr r1, [r6, #-1040] + mov r2, #2 + ldr r0, .L1779+24 + ldr r3, [r4, #3944] + bl rknand_print_hex + ldr r1, [r6, #-1032] + ldrh r3, [r4, r5] + mov r2, #4 + ldr r0, .L1779+28 + bl rknand_print_hex + ldr r0, .L1779+32 + ldr r1, [r6, #-900] + mov r2, #4 + ldrh r3, [r4, r5] + add sp, sp, #36 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + b rknand_print_hex +.L1780: .align 2 -.L1768: - .word .LANCHOR2 +.L1779: .word .LANCHOR0 - .word .LANCHOR2+180 - .word .LANCHOR2-1088 - .word -1084 - .word .LC124 + .word .LANCHOR2 + .word .LC131 .word -1044 + .word .LANCHOR2+180 + .word .LC107 + .word .LC132 + .word .LC133 + .word .LC134 .fnend - .size FtlMapTblRecovery, .-FtlMapTblRecovery + .size dump_map_info, .-dump_map_info .align 2 - .global FtlLoadMapInfo - .type FtlLoadMapInfo, %function -FtlLoadMapInfo: + .global FtlDumpSysBlock + .type FtlDumpSysBlock, %function +FtlDumpSysBlock: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, lr} - .save {r3, lr} - bl FtlL2PDataInit - ldr r0, .L1771 - bl FtlMapTblRecovery - mov r0, #0 - ldmfd sp!, {r3, pc} -.L1772: + stmfd sp!, {r4, r5, r6, r7, r8, lr} + .save {r4, r5, r6, r7, r8, lr} + mov r6, r0 + ldr r4, .L1785 + .pad #24 + sub sp, sp, #24 + mov r7, r0, asl #10 + mov r5, #0 + ldr r8, .L1785+4 + ldr r3, [r4, #-960] + str r3, [r4, #188] + ldr r3, [r4, #-936] + str r3, [r4, #192] + b .L1782 +.L1784: + mov r1, #1 + ldr r0, .L1785+8 + mov r2, r1 + orr r3, r3, r7 + str r3, [r4, #184] + bl FlashReadPages + ldr r3, [r4, #192] + mov r1, r6 + ldr r0, .L1785+12 + ldr r2, [r3, #0] + str r2, [sp, #0] + ldr r2, [r3, #4] + str r2, [sp, #4] + ldr r2, [r3, #8] + str r2, [sp, #8] + ldr r3, [r3, #12] + ldr r2, [r4, #180] + str r3, [sp, #12] + ldr r3, [r4, #188] + ldr r3, [r3, #0] + str r3, [sp, #16] + ldr r3, [r4, #184] + bl printk + ldr r3, [r4, #192] + ldr r3, [r3, #0] + cmn r3, #1 + beq .L1783 + ldr r0, .L1785+16 + mov r2, #4 + ldr r1, [r4, #-960] + mov r3, #768 + bl rknand_print_hex +.L1783: + add r5, r5, #1 + uxth r5, r5 +.L1782: + movw r2, #3918 + sxth r3, r5 + ldrh r2, [r8, r2] + cmp r3, r2 + blt .L1784 + add sp, sp, #24 + ldmfd sp!, {r4, r5, r6, r7, r8, pc} +.L1786: .align 2 -.L1771: - .word .LANCHOR2-1088 +.L1785: + .word .LANCHOR2 + .word .LANCHOR0 + .word .LANCHOR2+180 + .word .LC135 + .word .LC136 .fnend - .size FtlLoadMapInfo, .-FtlLoadMapInfo + .size FtlDumpSysBlock, .-FtlDumpSysBlock .align 2 - .global FtlLoadVonderInfo - .type FtlLoadVonderInfo, %function -FtlLoadVonderInfo: + .global FlashReadFacBbtData + .type FlashReadFacBbtData, %function +FlashReadFacBbtData: .fnstart - @ args = 0, pretend = 0, frame = 0 + @ args = 0, pretend = 0, frame = 40 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, lr} - .save {r3, lr} - mov r2, #3936 - ldr r3, .L1774 - ldr r0, .L1774+4 - ldrh r1, [r3, r2] - movw r2, #258 - strh r1, [r0, r2] @ movhi - ldr r2, .L1774+8 - strh r2, [r0, #252] @ movhi - movw r2, #3962 - ldrh r1, [r3, r2] - mov r2, #256 - strh r1, [r0, r2] @ movhi - movw r2, #3938 + ldr r3, .L1797 + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + .save {r4, r5, r6, r7, r8, r9, sl, lr} + mov r6, r1 + mov r9, r2 + movw r1, #3062 + movw r2, #3060 + ldrh r8, [r3, r1] ldrh r2, [r3, r2] - ldr r3, [r3, #3964] - strh r2, [r0, #254] @ movhi + .pad #40 + sub sp, sp, #40 + ldr r7, .L1797+4 + mov r4, r0 + mul r8, r8, r2 + ldr r3, [r7, #148] + str r3, [sp, #12] + ldr r3, [r7, #228] + uxth r8, r8 + sub r5, r8, #1 + mul sl, r8, r6 + str r3, [sp, #16] + uxth r5, r5 + sub r8, r8, #16 + b .L1788 +.L1794: + mov r1, #1 + add r3, r5, sl + add r0, sp, #4 + mov r2, r1 + mov r3, r3, asl #10 + str r3, [sp, #8] + bl FlashReadPages + ldr r3, [sp, #4] + cmn r3, #1 + beq .L1789 + ldr r3, [r7, #228] + ldrh r2, [r3, #0] + movw r3, #61664 + cmp r2, r3 + bne .L1789 + cmp r4, #0 + moveq r0, r4 + beq .L1790 + cmp r6, #0 + ldreq r3, .L1797+4 + moveq r0, #1 + beq .L1791 + b .L1792 +.L1793: + ldr r2, [r3, #148] + ubfx r1, r6, #5, #16 + and lr, r6, #31 + add r6, r6, #1 + ldr ip, [r2, r1, asl #2] + uxth r6, r6 + orr ip, ip, r0, asl lr + str ip, [r2, r1, asl #2] +.L1791: + ldr r2, [r3, #156] + cmp r6, r2 + bcc .L1793 +.L1792: + ldr r3, .L1797+4 + mov r2, r9 + mov r0, r4 + ldr r1, [r3, #148] + bl memcpy + mov r2, #4 + ldr r0, .L1797+8 + mov r1, r4 + mov r3, r2 + bl rknand_print_hex + mov r0, #0 + b .L1790 +.L1789: + sub r5, r5, #1 + uxth r5, r5 +.L1788: + cmp r5, r8 + bgt .L1794 + mvn r0, #0 +.L1790: + add sp, sp, #40 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +.L1798: + .align 2 +.L1797: + .word .LANCHOR0 + .word .LANCHOR2 + .word .LC137 + .fnend + .size FlashReadFacBbtData, .-FlashReadFacBbtData + .align 2 + .global FlashGetBadBlockList + .type FlashGetBadBlockList, %function +FlashGetBadBlockList: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + ldr r3, .L1806 + stmfd sp!, {r4, r5, r6, r7, r8, lr} + .save {r4, r5, r6, r7, r8, lr} + mov r5, r0 + ldr r3, [r3, #3624] + ldr r6, .L1806+4 + ldrb r2, [r3, #13] @ zero_extendqisi2 + ldrh r4, [r3, #14] + ldr r0, [r6, #136] + mul r4, r4, r2 + uxth r4, r4 + add r2, r4, #7 + mov r2, r2, lsr #3 + bl FlashReadFacBbtData + cmn r0, #1 + beq .L1805 + mov r2, #0 + mov r0, r4, lsr #4 + mov r3, r2 + sub r4, r4, #1 + mov r1, #1 + b .L1801 +.L1803: + ldr ip, [r6, #136] + mov r8, r2, lsr #5 + and r7, r2, #31 + ldr ip, [ip, r8, asl #2] + ands ip, ip, r1, asl r7 + movne ip, r3, asl #1 + addne r3, r3, #1 + uxthne r3, r3 + strneh r2, [r5, ip] @ movhi + cmp r3, r0 + bcs .L1805 + add r2, r2, #1 + uxth r2, r2 +.L1801: + cmp r2, r4 + blt .L1803 + b .L1800 +.L1805: + mov r3, #0 +.L1800: + mov r3, r3, asl #1 mvn r2, #0 - str r3, [r0, #260] - ldr r3, [r0, #-908] - str r3, [r0, #264] - ldr r3, [r0, #-912] - str r3, [r0, #268] - ldr r3, [r0, #-904] - str r3, [r0, #272] - mov r3, #288 - strh r2, [r0, r3] @ movhi - add r0, r0, #248 - bl FtlMapTblRecovery mov r0, #0 - ldmfd sp!, {r3, pc} -.L1775: + strh r2, [r5, r3] @ movhi + ldmfd sp!, {r4, r5, r6, r7, r8, pc} +.L1807: .align 2 -.L1774: +.L1806: .word .LANCHOR0 .word .LANCHOR2 - .word -3962 .fnend - .size FtlLoadVonderInfo, .-FtlLoadVonderInfo + .size FlashGetBadBlockList, .-FlashGetBadBlockList .align 2 - .global FtlRecoverySuperblock - .type FtlRecoverySuperblock, %function -FtlRecoverySuperblock: + .global FtlMakeBbt + .type FtlMakeBbt, %function +FtlMakeBbt: .fnstart - @ args = 0, pretend = 0, frame = 56 + @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + ldr r6, .L1826 + ldr r5, [r6, #4040] + cmp r5, #0 + bne .L1809 + ldr r8, .L1826+4 + bl FtlBbtMemInit + ldr r4, .L1826+8 + bl FtlLoadFactoryBbt + add sl, r8, #12 + b .L1810 +.L1816: + ldrh r3, [sl], #2 movw r2, #65535 - ldrh r3, [r0, #0] - .pad #60 - sub sp, sp, #60 - mov r4, r0 + ldr r0, [r4, #-960] + movw fp, #3912 + ldr r9, [r4, #-936] cmp r3, r2 - beq .L1777 - ldrh r3, [r0, #2] - ldr r1, .L1866 - ldrb fp, [r0, #6] @ zero_extendqisi2 - str r3, [sp, #12] - movw r3, #3916 - ldrh r3, [r1, r3] - ldr ip, [sp, #12] - str fp, [sp, #24] - cmp r3, ip - mov r3, #0 - streqh r3, [r0, #4] @ movhi - moveq r2, r3 @ movhi - ldrneh r0, [r0, #16] - bne .L1779 - b .L1863 -.L1780: - add r3, r3, #1 - uxth r3, r3 - add r1, r4, r3, asl #1 - ldrh r0, [r1, #16] -.L1779: - cmp r0, r2 - beq .L1780 - ldrb r1, [r4, #8] @ zero_extendqisi2 - cmp r1, #1 - bne .L1781 - bl FtlGetLastWrittenPage - cmn r0, #1 - mov r7, r0 - beq .L1782 - ldr r3, .L1866 - ldrb r2, [r3, #928] @ zero_extendqisi2 - cmp r2, #0 - bne .L1856 - add r3, r3, r0, asl #1 - movw r2, #3076 - ldrh r8, [r3, r2] - b .L1848 -.L1781: + str r0, [r4, #188] + str r9, [r4, #192] + beq .L1811 + ldrh r7, [r6, fp] + mov r1, #1 + mov r2, r1 + ldr r0, .L1826+12 + mla r7, r7, r5, r3 + mov r3, r7, asl #10 + str r3, [r4, #184] + bl FlashReadPages + ldrh r2, [r6, fp] + ldr r0, [r8, #28] + add r2, r2, #7 + ldr r1, [r4, #188] + mov r2, r2, lsr #3 + bl memcpy + b .L1812 +.L1811: + mov r1, r5 + bl FlashGetBadBlockList + ldr r0, [r4, #188] + ldr r1, [r8, #28] + bl FtlBbt2Bitmap + ldrh fp, [r6, fp] +.L1814: + sub fp, fp, #1 + uxth fp, fp +.L1825: + movw r7, #3912 + ldrh r0, [r6, r7] + mla r0, r0, r5, fp + uxth r0, r0 + bl FtlBbmIsBadBlock + cmp r0, #1 + beq .L1814 mov r1, #0 - bl FtlGetLastWrittenPage - cmn r0, #1 - mov r7, r0 - beq .L1782 -.L1856: - mov r8, r7 -.L1848: - ldr r3, .L1866 - movw r2, #3848 - mov r5, #0 - str r4, [sp, #32] - movw ip, #65535 - ldrh r9, [r3, r2] - ldr r2, .L1866+4 - ldr sl, [r2, #-972] - ldr r6, [r2, #-1168] - movw r2, #3928 - ldrh lr, [r3, r2] - mov r2, r4 - mov r3, r5 - b .L1784 -.L1782: + mov r2, #16 + strh fp, [sl, #-2] @ movhi + ldr r0, [r4, #-936] + bl ftl_memset + ldr r3, .L1826+16 + strh r3, [r9, #0] @ movhi mov r3, #0 - strh r3, [r4, #2] @ movhi - mov r2, r3 @ movhi -.L1863: - strb r2, [r4, #6] - b .L1777 -.L1786: - ldrh r0, [r2, #16] - cmp r0, ip - beq .L1785 - mov fp, #36 - orr r0, r8, r0, asl #10 - mla r1, fp, r5, sl - str r0, [r1, #4] - mov r0, #0 - str r0, [r1, #8] - mul r0, lr, r5 + str r3, [r9, #4] + ldrh r3, [sl, #-2] + ldrh r7, [r6, r7] + strh r3, [r9, #2] @ movhi + ldrh r3, [sl, #-2] + ldr r1, [r8, #28] + ldr r0, [r4, #188] + mla r7, r7, r5, r3 + mov r3, r7, asl #10 + str r3, [r4, #184] + ldr r3, .L1826+20 + ldrh r2, [r4, r3] + mov r2, r2, asl #2 + bl memcpy + mov r1, #1 + mov r2, r1 + ldr r0, .L1826+12 + bl FlashEraseBlocks + mov r1, #1 + mov r3, r1 + ldr r0, .L1826+12 + mov r2, r1 + bl FlashProgPages + ldr r3, [r4, #180] + cmn r3, #1 + bne .L1812 + uxth r0, r7 + bl FtlBbmMapBadBlock + b .L1825 +.L1812: + uxth r0, r7 add r5, r5, #1 - uxth r5, r5 - add fp, r0, #3 + bl FtlBbmMapBadBlock + add r8, r8, #4 +.L1810: + movw r3, #3870 + ldrh r3, [r6, r3] + cmp r5, r3 + bcc .L1816 + mov r4, #0 + ldr r7, .L1826 + movw r6, #3930 + b .L1817 +.L1818: + mov r0, r4 + add r4, r4, #1 + bl FtlBbmMapBadBlock + uxth r4, r4 +.L1817: + ldrh r3, [r7, r6] + ldr r5, .L1826 + cmp r3, r4 + bhi .L1818 + movw r7, #3992 + movw r6, #3980 + ldrh r4, [r5, r7] + sub r4, r4, #1 + uxth r4, r4 + b .L1819 +.L1824: + mov r0, r4 + bl FtlBbmIsBadBlock + cmp r0, #1 + beq .L1820 + mov r0, r4 + bl FlashTestBlk cmp r0, #0 - movlt r0, fp - bic r0, r0, #3 - add r0, r6, r0 - str r0, [r1, #12] -.L1785: + beq .L1821 + mov r0, r4 + bl FtlBbmMapBadBlock + b .L1820 +.L1821: + ldrh r2, [r5, r6] + movw r3, #65535 + cmp r2, r3 + streqh r4, [r5, r6] @ movhi +.L1822: + ldrne r2, .L1826 + movne r3, #3984 + strneh r4, [r2, r3] @ movhi + bne .L1823 +.L1820: + sub r4, r4, #1 + uxth r4, r4 +.L1819: + ldrh r3, [r5, r7] + sub r3, r3, #48 + cmp r4, r3 + bgt .L1824 +.L1823: + ldr r4, .L1826 + movw r6, #3980 + mov r5, #3984 + mov r7, #0 + movw r8, #3982 + mov r2, #2 + ldr r0, [r4, #4044] + mov r1, #1 + ldrh r3, [r4, r6] + str r7, [r4, #3988] + strh r7, [r4, r8] @ movhi + mov r3, r3, asl #10 + str r3, [r0, #4] + ldrh r3, [r4, r5] + mov r3, r3, asl #10 + str r3, [r0, #40] + bl FlashEraseBlocks + ldrh r0, [r4, r6] + bl FtlBbmMapBadBlock + ldrh r0, [r4, r5] + bl FtlBbmMapBadBlock + bl FtlBbmTblFlush + ldr r3, [r4, #3988] + ldrh r2, [r4, r5] add r3, r3, #1 - add r2, r2, #2 - uxth r3, r3 -.L1784: - cmp r3, r9 - bne .L1786 - ldrb r3, [r4, #8] @ zero_extendqisi2 - cmp r3, #1 - movne r3, #0 - bne .L1857 - ldr r3, .L1866 - ldrb r3, [r3, #928] @ zero_extendqisi2 - adds r3, r3, #0 - movne r3, #1 -.L1857: - ldr r6, .L1866+4 - mov r1, r5 - str r3, [sp, #20] - mov sl, #0 - ldr r2, [sp, #20] - ldr r0, [r6, #-972] + str r3, [r4, #3988] + ldrh r3, [r4, r6] + strh r7, [r4, r8] @ movhi + strh r2, [r4, r6] @ movhi + strh r3, [r4, r5] @ movhi + bl FtlBbmTblFlush +.L1809: + mov r0, #0 + ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L1827: + .align 2 +.L1826: + .word .LANCHOR0 + .word .LANCHOR0+3980 + .word .LANCHOR2 + .word .LANCHOR2+180 + .word -3872 + .word -1028 + .fnend + .size FtlMakeBbt, .-FtlMakeBbt + .align 2 + .type ftl_load_l2p_region, %function +ftl_load_l2p_region: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, r7, r8, lr} + .save {r4, r5, r6, r7, r8, lr} + mov r4, r0 + ldr r6, .L1833 + mov r5, #12 + ldr r3, [r6, #-1032] + ldr r7, [r3, r0, asl #2] + cmp r7, #0 + bne .L1829 + mul r5, r5, r1 + ldr r3, [r6, #-1852] + ldr r2, .L1833+4 + mov r1, #255 + add r3, r3, r5 + ldr r0, [r3, #8] + movw r3, #3926 + ldrh r2, [r2, r3] + bl ftl_memset + ldr r3, [r6, #-1852] + strh r4, [r3, r5] @ movhi + ldr r3, [r6, #-1852] + add r5, r3, r5 + str r7, [r5, #4] + b .L1830 +.L1829: + mul r5, r5, r1 + ldr r3, [r6, #-1852] + mov r1, #1 + str r7, [r6, #184] + add r0, r6, #180 + mov r2, r1 + add r3, r3, r5 + ldr r3, [r3, #8] + str r3, [r6, #188] + ldr r3, [r6, #-936] + str r3, [r6, #192] bl FlashReadPages - ldr fp, [r6, #-1800] - movw ip, #65535 - str ip, [sp, #4] - str fp, [sp, #8] - b .L1788 -.L1793: - mov lr, #36 - ldr r1, [r6, #-972] - mul r2, lr, sl - add r3, r1, r2 - ldr r2, [r1, r2] - cmp r2, #0 - bne .L1789 - ldr r3, [r3, #12] - ldr fp, [r3, #4] - cmn fp, #1 - beq .L1790 - ldr r1, [r6, #-1800] - mov r0, fp - str r3, [sp, #0] - bl ftl_cmp_data_ver - ldr r3, [sp, #0] - cmp r0, #0 - addne fp, fp, #1 - strne fp, [r6, #-1800] -.L1790: - ldr r3, [r3, #0] - cmn r3, #1 - bne .L1792 - b .L1791 -.L1789: - ldr r1, [r3, #4] - movw fp, #294 - ldr r0, .L1866+8 + ldr r3, [r6, #180] + ldr r8, [r6, #192] + cmp r3, #256 + bne .L1831 + mov r1, r4 + mov r2, r7 + ldr r0, .L1833+8 bl printk - ldrh r3, [r4, #0] - uxth r2, r8 - str r2, [sp, #4] - strh r3, [r6, fp] @ movhi -.L1792: - add sl, sl, #1 -.L1788: - uxth r9, sl - cmp r9, r5 - bcc .L1793 -.L1791: - ldr r3, .L1866+4 - cmp r9, r5 - addeq r7, r7, #1 - uxthne r7, r7 - movne r2, #36 - ldrne r3, [r3, #-972] - uxtheq r7, r7 - ldreq r3, [r3, #-972] - mlane r9, r2, r9, r3 - ldreq r0, [r3, #4] - ldrne r0, [r9, #4] - ubfx r0, r0, #10, #16 - bl P2V_plane - ldrb r2, [r4, #8] @ zero_extendqisi2 - ldr r3, .L1866 - cmp r2, #1 - str r0, [sp, #16] - bne .L1796 - ldrb r1, [r3, #928] @ zero_extendqisi2 - cmp r1, #0 - addeq r7, r3, r7, asl #1 - movweq r1, #3076 - ldreqh r7, [r7, r1] -.L1796: - movw r1, #3916 - ldr ip, [sp, #12] - ldrh r3, [r3, r1] - ldr fp, [sp, #24] - cmp r3, r7 - streqh r7, [r4, #2] @ movhi - moveq r3, #0 - streqb r3, [r4, #6] - streqh r3, [r4, #4] @ movhi - ldr r3, [sp, #16] - cmp r7, ip - cmpeq r3, fp - beq .L1864 -.L1798: - ldr fp, [sp, #4] - movw r3, #65535 - ldr ip, [sp, #8] - cmp fp, r3 - sub r6, ip, #1 - bne .L1799 - cmp r2, #0 - bne .L1800 -.L1799: - ldr r2, .L1866+4 - uxth r3, r8 - ldr ip, [sp, #12] - mvn fp, #0 - mov sl, r3 - mov r9, fp - ldr r1, [r2, #-1008] - ldr r8, .L1866+4 - cmn r1, #1 - streq r6, [r2, #-1008] - ldr r2, [r2, #-1008] - str r2, [sp, #4] - add r2, ip, #7 - cmp r3, r2 - subgt r5, r3, #7 - mov r3, r7 - ldrle r5, [sp, #12] - mov r7, r6 - uxthgt r5, r5 - b .L1803 -.L1805: - ldrh r0, [r1, #16] - movw lr, #65535 - cmp r0, lr - beq .L1804 - ldr ip, [sp, #8] - mov r3, #36 - orr r0, r5, r0, asl #10 - mla lr, r3, r6, ip - add r6, r6, #1 - uxth r6, r6 - str r0, [lr, #4] -.L1804: - add r2, r2, #1 - add r1, r1, #2 - uxth r2, r2 -.L1816: - ldr lr, [sp, #36] - cmp r2, lr - bne .L1805 - ldr r3, [sp, #28] - mov r1, r6 - ldr r0, [r8, #-972] - ldr r2, [sp, #20] - str r3, [sp, #0] - bl FlashReadPages - ldr r2, .L1866 - add r0, r8, r5, asl #1 - mov r1, #0 - str r0, [sp, #8] - ldr r3, [sp, #0] - ldrb ip, [r2, #928] @ zero_extendqisi2 - ldr r2, [r8, #-972] - str ip, [sp, #28] - b .L1806 -.L1814: - ldr r0, [r2, #0] - cmp r0, #0 - bne .L1807 - ldr r0, [r2, #12] - movw ip, #65535 - ldrh lr, [r0, #0] - cmp lr, ip - beq .L1808 - ldr r0, [r0, #4] - cmn r0, #1 - beq .L1808 - cmn fp, #1 - ldr r9, [r8, #-1008] - str r0, [r8, #-1008] - bne .L1808 - ldr lr, [sp, #8] - sub r0, lr, #892 - ldrh r0, [r0, #0] - cmp r0, ip - bne .L1809 - ldr r0, [sp, #28] - cmp r0, #0 - beq .L1808 -.L1809: - cmp r9, r7 - mvneq fp, #0 - movne fp, r9 - b .L1808 -.L1807: - mov r6, r7 - ldrh r1, [r4, #0] - mov r7, r3 - ldr r3, .L1866+4 - movw r2, #294 - strh r1, [r3, r2] @ movhi - ldrb r2, [r4, #8] @ zero_extendqisi2 - cmp r2, #0 - bne .L1800 - add r5, r3, r5, asl #1 - movw r2, #65535 - sub r5, r5, #892 - ldrh r1, [r5, #0] - cmp r1, r2 - bne .L1810 - cmn fp, #1 - bne .L1859 -.L1811: - ldr fp, [sp, #4] - cmp fp, r6 - beq .L1812 -.L1859: - str fp, [r3, #-1008] - b .L1800 -.L1812: - ldr r2, [r3, #-1008] - b .L1865 -.L1810: - cmp r9, r6 - beq .L1813 - cmn r9, #1 - strne r9, [r3, #-1008] - b .L1800 -.L1813: - ldr r2, [r3, #-1008] - cmp r2, r6 - beq .L1800 -.L1865: - sub r2, r2, #1 - b .L1860 -.L1808: - add r1, r1, #1 - add r2, r2, #36 - uxth r1, r1 -.L1806: - cmp r1, r6 - bne .L1814 - add r5, r5, #1 - uxth r5, r5 -.L1803: - cmp r5, sl - bhi .L1815 - ldr r1, .L1866 - movw r2, #3848 - ldr lr, [r8, #-972] - mov r6, #0 - str r3, [sp, #28] - ldrh ip, [r1, r2] + ldr r3, .L1833+12 + mov r2, r7, lsr #10 + sub r0, r6, #1088 mov r1, r4 - str lr, [sp, #8] - mov r2, r6 - str ip, [sp, #36] - b .L1816 -.L1815: - mov r6, r7 - mov r7, r3 - ldr r3, .L1866+4 - mvn r2, #0 -.L1860: - str r2, [r3, #-1008] -.L1800: - ldr r5, .L1866+4 - mov r3, #296 - mov r2, #1 - sub r0, r5, #1088 - strh r2, [r5, r3] @ movhi - bl FtlMapBlkWriteDumpData - ldr r8, [sp, #12] - str r7, [sp, #8] -.L1817: - ldr r3, .L1866 - movw r2, #3848 - mov r7, #0 - ldr lr, [r5, #-972] - mov fp, #36 - ldrh sl, [r3, r2] - mov r2, r4 - ldrb ip, [r3, #928] @ zero_extendqisi2 - mov r3, r7 - b .L1818 -.L1821: - ldrh r0, [r2, #16] - movw r1, #65535 - cmp r0, r1 - beq .L1819 - mla r1, fp, r7, lr - orr r0, r8, r0, asl #10 - str r0, [r1, #4] - ldrb r9, [r4, #8] @ zero_extendqisi2 - cmp r9, #1 - bne .L1820 - cmp ip, #0 - orrne r0, r0, #-2147483648 - strne r0, [r1, #4] -.L1820: - add r7, r7, #1 - uxth r7, r7 -.L1819: - add r3, r3, #1 - add r2, r2, #2 - uxth r3, r3 -.L1818: - cmp r3, sl - bne .L1821 - mov r1, r7 - ldr r0, [r5, #-972] - ldr r2, [sp, #20] - bl FlashReadPages - mov r3, #36 - mul r3, r3, r7 - mov r7, #0 - str r3, [sp, #36] - b .L1822 -.L1843: - ldr r9, [r5, #-972] - add r9, r9, r7 - ldr sl, [r9, #4] - ubfx r0, sl, #10, #16 - str sl, [sp, #52] - bl P2V_plane - ldr r3, [sp, #12] - cmp r8, r3 - bcc .L1823 - ldr fp, [sp, #24] - mov ip, r3 - cmp r0, fp - movcs r3, #0 - movcc r3, #1 - cmp r8, ip - movne r3, #0 - cmp r3, #0 - bne .L1823 - ldr r3, [sp, #16] - ldr ip, [sp, #8] - cmp r0, r3 - cmpeq r8, ip - beq .L1855 - ldr r3, [r9, #0] - cmn r3, #1 - beq .L1825 - ldr sl, [r9, #12] - movw r3, #61589 - ldrh r2, [sl, #0] - cmp r2, r3 - bne .L1832 -.L1826: - ldr r6, [sl, #4] - cmn r6, #1 - beq .L1827 - ldr r1, [r5, #-1800] - mov r0, r6 - bl ftl_cmp_data_ver - cmp r0, #0 - addne r3, r6, #1 - strne r3, [r5, #-1800] -.L1827: - ldr r9, [sl, #8] - add r1, sp, #48 - ldr r3, [sl, #12] - mov r2, #0 - mov r0, r9 - str r3, [sp, #44] - bl log2phys - ldr r1, [r5, #-1008] - cmn r1, #1 - beq .L1828 - mov r0, r6 - bl ftl_cmp_data_ver - cmp r0, #0 - beq .L1828 - ldr r3, [sp, #44] - cmn r3, #1 - beq .L1829 - ldr r0, [r5, #-972] - mov r1, #1 - mov r2, #0 - add r0, r0, r7 - ldr fp, [r0, #12] - str r3, [r0, #4] - str fp, [sp, #4] - bl FlashReadPages - ldr r3, [r5, #-972] - ldr ip, [fp, #4] - add fp, r3, r7 - ldr r3, [r3, r7] - str ip, [sp, #28] - cmn r3, #1 - bne .L1830 - b .L1831 -.L1829: - ldr r3, [sp, #52] - ldr r2, [sp, #48] - cmp r2, r3 - bne .L1832 - mov r0, r9 - add r1, sp, #44 - mov r2, #1 - bl log2phys + strh r2, [r6, r3] @ movhi + ldr r3, [r6, #-1852] + add r3, r3, r5 + ldr r2, [r3, #8] + bl FtlMapWritePage +.L1831: + ldrh r3, [r8, #8] + cmp r3, r4 + beq .L1832 + mov r2, r7 + ldr r7, .L1833 + mov r1, r4 + ldr r0, .L1833+16 + bl printk + ldr r6, .L1833+4 + mov r2, #4 + ldr r0, .L1833+20 + mov r3, r2 + ldr r1, [r7, #192] + bl rknand_print_hex + mov r3, #3952 + ldrh r3, [r6, r3] + mov r2, #4 + ldr r0, .L1833+24 + ldr r1, [r7, #-1032] + bl rknand_print_hex + mov r3, #1 + str r3, [r6, #4040] .L1832: - ldrh r0, [r4, #0] - b .L1862 + ldr r3, .L1833 + mov r1, #0 + ldr r3, [r3, #-1852] + add r2, r3, r5 + str r1, [r2, #4] + strh r4, [r3, r5] @ movhi .L1830: - ldr r3, [sp, #4] - ldr sl, [r3, #8] - cmp sl, r9 - bne .L1831 - ldr r0, [r5, #-1008] - ldr r1, [sp, #28] - bl ftl_cmp_data_ver - cmp r0, #0 - beq .L1831 - ldr r3, [sp, #48] - ldr r2, [sp, #52] - cmp r3, r2 - beq .L1836 + mov r0, #0 + ldmfd sp!, {r4, r5, r6, r7, r8, pc} +.L1834: + .align 2 .L1833: - ldr r2, [sp, #44] - cmp r3, r2 - beq .L1831 - cmn r3, #1 - streq r3, [fp, #0] - beq .L1835 - ldr ip, [fp, #12] - mov r0, fp - str r3, [fp, #4] - mov r1, #1 - mov r2, #0 - str ip, [sp, #4] - bl FlashReadPages -.L1835: - ldr r3, [r5, #-972] - ldr r3, [r3, r7] + .word .LANCHOR2 + .word .LANCHOR0 + .word .LC138 + .word -1048 + .word .LC139 + .word .LC98 + .word .LC140 + .fnend + .size ftl_load_l2p_region, .-ftl_load_l2p_region + .align 2 + .global log2phys + .type log2phys, %function +log2phys: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r3, r4, r5, r6, r7, r8, sl, lr} + .save {r3, r4, r5, r6, r7, r8, sl, lr} + mov r8, r2 + ldr r3, .L1844 + movw r2, #3924 + mov r4, r1 + ldrh r7, [r3, r2] + mvn r2, #0 + add r7, r7, #7 + mov r6, r0, lsr r7 + bic r7, r0, r2, asl r7 + movw r2, #3954 + ldrh r2, [r3, r2] + uxth r6, r6 + ldr r3, .L1844+4 + uxth r7, r7 + ldr sl, [r3, #-1852] + mov r3, #0 + mov r5, r3 + b .L1836 +.L1842: + add r3, r3, #12 + add r1, sl, r3 + ldrh r1, [r1, #-12] + cmp r1, r6 + bne .L1837 +.L1838: + cmp r8, #0 + ldr r3, .L1844+4 + mov r2, #12 + bne .L1839 + ldr r3, [r3, #-1852] + mla r2, r2, r5, r3 + ldr r3, [r2, #8] + ldr r3, [r3, r7, asl #2] + str r3, [r4, #0] + b .L1840 +.L1839: + mul r2, r2, r5 + ldr r1, [r3, #-1852] + ldr r0, [r4, #0] + add r1, r1, r2 + ldr r1, [r1, #8] + str r0, [r1, r7, asl #2] + ldr r1, [r3, #-1852] + add r2, r1, r2 + ldr r1, [r2, #4] + orr r1, r1, #-2147483648 + str r1, [r2, #4] + ldr r2, .L1844+8 + strh r6, [r3, r2] @ movhi +.L1840: + ldr r3, .L1844+4 + mov r2, #12 + mov r0, #0 + ldr r3, [r3, #-1852] + mla r5, r2, r5, r3 + ldr r3, [r5, #4] cmn r3, #1 - beq .L1836 - ldr r3, [sp, #4] - ldr r0, [r5, #-1008] - ldr r9, [r3, #4] - mov r1, r9 - bl ftl_cmp_data_ver - cmp r0, #0 - beq .L1836 - ldr r0, [sp, #28] - mov r1, r9 - bl ftl_cmp_data_ver - cmp r0, #0 - beq .L1831 + addne r3, r3, #1 + strne r3, [r5, #4] + ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} +.L1837: + add r5, r5, #1 + uxth r5, r5 .L1836: - mov r0, sl - ldr r1, [sp, #44] - bl FtlReUsePrevPpa -.L1831: - ldrh r0, [r4, #0] - mvn r3, #0 - str r3, [sp, #44] - bl decrement_vpc_count + cmp r5, r2 + bne .L1842 + bl select_l2p_ram_region + mov r3, #12 + mul r3, r3, r0 + mov r5, r0 + add r2, sl, r3 + ldrh r1, [sl, r3] + movw r3, #65535 + cmp r1, r3 + beq .L1843 + ldr r3, [r2, #4] + cmp r3, #0 + bge .L1843 + bl flush_l2p_region +.L1843: + mov r0, r6 + mov r1, r5 + bl ftl_load_l2p_region b .L1838 -.L1828: - ldr r3, [sp, #52] - ldr r2, [sp, #48] +.L1845: + .align 2 +.L1844: + .word .LANCHOR0 + .word .LANCHOR2 + .word -1848 + .fnend + .size log2phys, .-log2phys + .align 2 + .type FtlReadRefresh.part.15, %function +FtlReadRefresh.part.15: + .fnstart + @ args = 0, pretend = 0, frame = 40 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} + .pad #40 + sub sp, sp, #40 + ldr r4, .L1854 + ldr r6, .L1854+4 + ldr r2, [r4, #-1624] + ldr r3, [r6, #3976] cmp r2, r3 - beq .L1838 - mov r0, r9 - add r1, sp, #52 - mov r2, #1 - bl log2phys - ldr fp, [sp, #48] - cmn fp, #1 - beq .L1838 - ldr r3, [sp, #44] - cmp fp, r3 - beq .L1838 - ubfx r0, fp, #10, #16 - bl P2V_block_in_plane - ldr r3, .L1866+12 - ldrh r3, [r5, r3] - cmp r3, r0 - beq .L1839 - ldr r3, .L1866+16 - ldrh r3, [r5, r3] - cmp r3, r0 - beq .L1839 - ldr r3, .L1866+20 - ldrh r3, [r5, r3] - cmp r3, r0 - bne .L1838 -.L1839: - ldr ip, .L1866+4 - mov r1, #1 + bcs .L1847 + mov r5, #2048 +.L1850: + ldr r0, [r4, #-1624] + ldr r3, [r6, #3976] + cmp r0, r3 + bcs .L1852 + mov r1, sp mov r2, #0 - ldr r0, [ip, #-972] - str fp, [r0, #4] - ldr sl, [r0, #12] - bl FlashReadPages - ldr r0, .L1866+4 - ldr r1, [sl, #4] - ldr r3, [r0, #-972] - ldr r3, [r3, #0] - cmn r3, #1 - beq .L1838 - mov r0, r6 - bl ftl_cmp_data_ver - cmp r0, #0 - bne .L1838 - mov r0, r9 - add r1, sp, #48 - mov r2, #1 bl log2phys -.L1838: - ldr r0, [sp, #44] + ldr r0, [sp, #0] + ldr r3, [r4, #-1624] cmn r0, #1 - beq .L1823 + add r3, r3, #1 + str r3, [r4, #-1624] + beq .L1849 + str r0, [sp, #8] + add r0, sp, #40 + mov r2, #0 + mov r1, #1 + str r2, [r0, #-36]! + str r3, [sp, #20] + str r2, [sp, #12] + str r2, [sp, #16] + bl FlashReadPages + ldr r3, [sp, #4] + cmp r3, #256 + bne .L1852 + ldr r0, [sp, #0] ubfx r0, r0, #10, #16 bl P2V_block_in_plane - ldr r2, [r5, #-2016] - mov r3, r0, asl #1 - mov r1, r0 - ldrh r3, [r2, r3] - cmp r3, #0 - beq .L1840 -.L1862: - bl decrement_vpc_count - b .L1823 -.L1840: - ldr r0, .L1866+24 - bl printk - b .L1823 -.L1825: - ldrh r3, [r4, #0] - movw r1, #294 - mov r2, r6 - ldr r0, .L1866+28 - strh r3, [r5, r1] @ movhi - mov r1, sl - bl printk - ldr r3, [r5, #300] - cmp r3, #31 - addls r2, r5, r3, asl #2 - addls r3, r3, #1 - ldrls r1, [sp, #52] - strls r3, [r5, #300] - strls r1, [r2, #304] - ldrh r0, [r4, #0] - bl decrement_vpc_count - ldr r3, [r5, #-1008] - cmn r3, #1 - beq .L1861 -.L1842: - cmp r3, r6 - bls .L1823 -.L1861: - str r6, [r5, #-1008] -.L1823: - add r7, r7, #36 -.L1822: - ldr r3, [sp, #36] - cmp r7, r3 - bne .L1843 - ldrb r3, [r4, #8] @ zero_extendqisi2 - add r8, r8, #1 - cmp r3, #1 - uxth r8, r8 - bne .L1844 - ldr r3, .L1866 - ldrb r2, [r3, #928] @ zero_extendqisi2 - cmp r2, #0 - beq .L1844 - movw r2, #3918 - ldr ip, [sp, #8] - ldrh r3, [r3, r2] - cmp ip, r8 - cmpeq r3, r8 - beq .L1855 -.L1844: - ldr r3, .L1866 - movw r2, #3916 - ldrh r2, [r3, r2] - cmp r8, r2 - bne .L1817 - mov r2, #0 - movw r1, #3848 - strh r2, [r4, #4] @ movhi - ldrh r1, [r3, r1] - mov r3, r2 - strh r8, [r4, #2] @ movhi - movw r2, #65535 - ldr r0, [sp, #32] - b .L1845 + bl FtlGcRefreshBlock + b .L1852 +.L1849: + subs r5, r5, #1 + bne .L1850 + b .L1848 .L1847: - add r0, r0, #2 - ldrh ip, [r0, #14] - cmp ip, r2 - strneb r3, [r4, #6] - bne .L1777 -.L1846: - add r3, r3, #1 - uxth r3, r3 -.L1845: - cmp r3, r1 - bne .L1847 - b .L1777 + ldr r3, [r4, #-1836] + mov r0, #0 + str r0, [r4, #-1628] + str r0, [r4, #-1624] + str r3, [r4, #-1632] + b .L1848 +.L1852: + mvn r0, #0 +.L1848: + add sp, sp, #40 + ldmfd sp!, {r4, r5, r6, pc} .L1855: -.L1824: - ldr r7, [sp, #8] - ldr r3, [sp, #16] - strh r7, [r4, #2] @ movhi - strb r3, [r4, #6] -.L1864: - mov r0, r4 - mov r1, r7 - mov r2, r3 - bl ftl_sb_update_avl_pages -.L1777: + .align 2 +.L1854: + .word .LANCHOR2 + .word .LANCHOR0 + .fnend + .size FtlReadRefresh.part.15, .-FtlReadRefresh.part.15 + .align 2 + .global FtlReadRefresh + .type FtlReadRefresh, %function +FtlReadRefresh: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + ldr r3, .L1863 + ldr r2, [r3, #-1628] + cmp r2, #0 + beq .L1857 + b FtlReadRefresh.part.15 +.L1857: + ldr r2, .L1863+4 + ldr r0, [r3, #-1784] + ldr r1, [r2, #3840] + ldrb r2, [r2, #928] @ zero_extendqisi2 + cmp r2, #0 + ldr r2, [r3, #-1836] + addeq r0, r1, r0, lsr #10 + moveq r1, #33554432 + movne r0, #4194304 + moveq r0, r1, asr r0 + ldr r1, [r3, #-1632] + add r3, r2, #1048576 + cmp r1, r3 + bhi .L1859 + add r1, r0, r1 + cmp r1, r2 + bcc .L1859 + ldr r3, .L1863 + ldrb r3, [r3, #-2044] @ zero_extendqisi2 + cmp r3, #0 + bne .L1860 +.L1859: + ldr r3, .L1863 + mov r1, #1 + str r2, [r3, #-1632] + str r1, [r3, #-1628] + mov r1, #0 + str r1, [r3, #-1624] +.L1860: mov r0, #0 - add sp, sp, #60 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L1867: + bx lr +.L1864: .align 2 -.L1866: - .word .LANCHOR0 +.L1863: .word .LANCHOR2 - .word .LC125 - .word -1996 - .word -1948 - .word -1900 - .word .LC126 - .word .LC127 + .word .LANCHOR0 .fnend - .size FtlRecoverySuperblock, .-FtlRecoverySuperblock + .size FtlReadRefresh, .-FtlReadRefresh .align 2 - .global FtlWriteDumpData - .type FtlWriteDumpData, %function -FtlWriteDumpData: + .global FtlReUsePrevPpa + .type FtlReUsePrevPpa, %function +FtlReUsePrevPpa: .fnstart - @ args = 0, pretend = 0, frame = 40 + @ args = 0, pretend = 0, frame = 8 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, r7, r8, sl, lr} - .save {r4, r5, r6, r7, r8, sl, lr} - .pad #44 - sub sp, sp, #44 - ldr r4, .L1877 - ldr r3, [r4, #-2088] - mov r2, r4 - cmp r3, #0 - bne .L1868 - ldr r3, .L1877+4 - ldrh r3, [r4, r3] - cmp r3, #0 - beq .L1870 - ldrb r1, [r4, #-1988] @ zero_extendqisi2 - cmp r1, #0 + stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, lr} + .save {r0, r1, r2, r4, r5, r6, r7, lr} + mov r7, r0 + ubfx r0, r1, #10, #16 + str r1, [sp, #4] + bl P2V_block_in_plane + ldr r3, .L1871 + ldr r1, [r3, #-2016] + mov r5, r0, asl #1 + ldrh r2, [r1, r5] + cmp r2, #0 + addne r2, r2, #1 + strneh r2, [r1, r5] @ movhi + bne .L1867 + ldr r4, [r3, #-2004] + cmp r4, #0 + beq .L1867 + ldr r1, .L1871+4 + mov ip, #6 + ldrh lr, [r3, r1] + ldr r3, [r3, #-2024] + ldr r1, .L1871+8 + rsb r4, r3, r4 + mov r4, r4, asr #1 + mul r4, r1, r4 + movw r1, #65535 + uxth r4, r4 + b .L1868 +.L1870: + cmp r4, r0 + bne .L1869 + mov r1, r4 + ldr r0, .L1871+12 + bl List_remove_node + ldr r6, .L1871 + ldr r3, .L1871+4 + mov r0, r4 + ldrh r2, [r6, r3] + sub r2, r2, #1 + strh r2, [r6, r3] @ movhi + bl INSERT_DATA_LIST + ldr r3, [r6, #-2016] + ldrh r2, [r3, r5] + add r2, r2, #1 + strh r2, [r3, r5] @ movhi + b .L1867 +.L1869: + mul r4, ip, r4 + ldrh r4, [r3, r4] + cmp r4, r1 + beq .L1867 + add r2, r2, #1 + uxth r2, r2 +.L1868: + cmp r2, lr bne .L1870 - ldr r5, .L1877+8 - movw r0, #3916 - ldrb r1, [r4, #-1989] @ zero_extendqisi2 - ldrh r0, [r5, r0] - mul r1, r0, r1 - cmp r3, r1 - beq .L1870 - ldrb r8, [r4, #-1986] @ zero_extendqisi2 - movw r3, #3848 - ldr r7, [r5, #3976] - cmp r8, #0 - ldrh r6, [r5, r3] - bne .L1868 - sub r7, r7, #1 - mov r1, sp - mov r2, r8 +.L1867: mov r0, r7 + add r1, sp, #4 + mov r2, #1 bl log2phys - ldr r3, [sp, #0] - ldr r0, [r4, #-960] - ldr r4, [r4, #-936] - cmn r3, #1 - str r3, [sp, #8] - str r7, [sp, #20] - str r0, [sp, #12] - str r4, [sp, #16] - str r8, [r4, #4] - beq .L1871 - add r0, sp, #4 - mov r1, #1 - mov r2, r8 - bl FlashReadPages - b .L1872 -.L1871: - movw r3, #3926 - mov r1, #255 - ldrh r2, [r5, r3] - bl ftl_memset + ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, pc} .L1872: - ldr r3, .L1877+12 - mov r6, r6, asl #2 - ldr r5, .L1877 - ldr sl, .L1877+4 - strh r3, [r4, #0] @ movhi - ldr r8, .L1877+16 - b .L1873 -.L1876: - ldrh r3, [r5, sl] - cmp r3, #0 - beq .L1874 - ldr r3, [sp, #8] - sub r6, r6, #1 - str r7, [r4, #8] - ldr r0, .L1877+20 - str r3, [r4, #12] - ldrh r3, [r5, r8] - strh r3, [r4, #2] @ movhi - bl get_new_active_ppa - ldr r3, [r5, #-1800] + .align 2 +.L1871: + .word .LANCHOR2 + .word -2000 + .word -1431655765 + .word .LANCHOR2-2004 + .fnend + .size FtlReUsePrevPpa, .-FtlReUsePrevPpa + .align 2 + .global Ftlscanalldata + .type Ftlscanalldata, %function +Ftlscanalldata: + .fnstart + @ args = 0, pretend = 0, frame = 8 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, r7, r8, lr} + .save {r4, r5, r6, r7, r8, lr} + mov r1, #0 + ldr r4, .L1879 + .pad #32 + sub sp, sp, #32 + ldr r0, .L1879+4 + mov r5, #0 + bl printk + ldr r7, .L1879+8 + mov r6, r4 + b .L1874 +.L1878: + mov r0, r5 + add r1, sp, #28 + mov r2, #0 + bl log2phys + movs r3, r5, asl #21 + bne .L1875 + ldr r0, .L1879+12 + mov r1, r5 + ldr r2, [sp, #28] + bl printk +.L1875: + ldr r3, [sp, #28] + cmn r3, #1 + beq .L1876 + str r3, [r4, #184] mov r2, #0 + ldr r3, [r4, #-960] mov r1, #1 - str r0, [sp, #8] - add r0, sp, #4 - str r3, [r4, #4] - add r3, r3, #1 + ldr r8, [r4, #-936] + ldr r0, .L1879+16 + str r3, [r4, #188] + str r5, [r4, #196] + str r8, [r4, #192] + str r2, [r4, #180] + bl FlashReadPages + ldr r3, [r4, #180] cmn r3, #1 - str r3, [r5, #-1800] - moveq r3, #0 - streq r3, [r5, #-1800] - mov r3, r2 - bl FlashProgPages - ldrh r0, [r5, r8] - bl decrement_vpc_count -.L1873: - cmp r6, #0 - bne .L1876 + cmpne r3, #256 + beq .L1877 + ldr r3, [r8, #8] + cmp r3, r5 + beq .L1876 +.L1877: + ldr r3, [r6, #192] + ldr r2, [r6, #188] + ldr r0, .L1879+20 + ldr r1, [r3, #4] + str r1, [sp, #0] + ldr r1, [r3, #8] + str r1, [sp, #4] + ldr r1, [r3, #12] + str r1, [sp, #8] + ldr r1, [r2, #0] + str r1, [sp, #12] + mov r1, r5 + ldr r2, [r2, #4] + str r2, [sp, #16] + ldr r2, [r6, #184] + ldr r3, [r3, #0] + bl printk +.L1876: + add r5, r5, #1 .L1874: - ldr r3, .L1877 - mov r2, #1 - strb r2, [r3, #-1986] - b .L1868 -.L1870: - mov r3, #0 - strb r3, [r2, #-1986] -.L1868: - add sp, sp, #44 - ldmfd sp!, {r4, r5, r6, r7, r8, sl, pc} -.L1878: + ldr r3, [r7, #3976] + cmp r5, r3 + bcc .L1878 + add sp, sp, #32 + ldmfd sp!, {r4, r5, r6, r7, r8, pc} +.L1880: .align 2 -.L1877: +.L1879: .word .LANCHOR2 - .word -1992 + .word .LC141 .word .LANCHOR0 - .word -3947 - .word -1996 - .word .LANCHOR2-1996 + .word .LC142 + .word .LANCHOR2+180 + .word .LC143 .fnend - .size FtlWriteDumpData, .-FtlWriteDumpData + .size Ftlscanalldata, .-Ftlscanalldata .align 2 - .global l2p_flush - .type l2p_flush, %function -l2p_flush: + .global FtlRecoverySuperblock + .type FtlRecoverySuperblock, %function +FtlRecoverySuperblock: .fnstart - @ args = 0, pretend = 0, frame = 0 + @ args = 0, pretend = 0, frame = 56 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, r6, r7, lr} - .save {r3, r4, r5, r6, r7, lr} - bl FtlWriteDumpData - mov r4, #0 - ldr r7, .L1883 - movw r6, #3954 - ldr r5, .L1883+4 - b .L1880 -.L1882: - ldr r3, [r5, #-1852] - mov r2, #12 - mla r3, r2, r4, r3 - ldr r3, [r3, #4] - cmp r3, #0 - bge .L1881 - mov r0, r4 - bl flush_l2p_region -.L1881: - add r4, r4, #1 - uxth r4, r4 -.L1880: - ldrh r3, [r7, r6] - cmp r3, r4 - bhi .L1882 - mov r0, #0 - ldmfd sp!, {r3, r4, r5, r6, r7, pc} + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + movw r2, #65535 + ldrh r3, [r0, #0] + .pad #60 + sub sp, sp, #60 + mov r4, r0 + cmp r3, r2 + beq .L1882 + ldrh r3, [r0, #2] + ldr r1, .L1971 + ldrb fp, [r0, #6] @ zero_extendqisi2 + str r3, [sp, #12] + movw r3, #3916 + ldrh r3, [r1, r3] + ldr ip, [sp, #12] + str fp, [sp, #24] + cmp r3, ip + mov r3, #0 + streqh r3, [r0, #4] @ movhi + moveq r2, r3 @ movhi + ldrneh r0, [r0, #16] + bne .L1884 + b .L1968 +.L1885: + add r3, r3, #1 + uxth r3, r3 + add r1, r4, r3, asl #1 + ldrh r0, [r1, #16] .L1884: - .align 2 -.L1883: - .word .LANCHOR0 - .word .LANCHOR2 - .fnend - .size l2p_flush, .-l2p_flush - .align 2 - .global FtlVpcCheckAndModify - .type FtlVpcCheckAndModify, %function -FtlVpcCheckAndModify: - .fnstart - @ args = 0, pretend = 0, frame = 8 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r0, r1, r4, r5, r6, r7, r8, lr} - .save {r0, r1, r4, r5, r6, r7, r8, lr} - mov r4, #0 - ldr r6, .L1892 - ldr r1, .L1892+4 - ldr r0, .L1892+8 - bl printk - movw r3, #3858 - ldrh r2, [r6, r3] - mov r1, #0 - ldr r5, .L1892+12 - mov r2, r2, asl #1 - ldr r0, [r5, #-916] - bl ftl_memset - b .L1886 -.L1888: - mov r0, r4 - add r1, sp, #4 - mov r2, #0 - bl log2phys - ldr r0, [sp, #4] + cmp r0, r2 + beq .L1885 + ldrb r1, [r4, #8] @ zero_extendqisi2 + cmp r1, #1 + bne .L1886 + bl FtlGetLastWrittenPage cmn r0, #1 + mov r7, r0 beq .L1887 - ubfx r0, r0, #10, #16 - bl P2V_block_in_plane - ldr r3, [r5, #-916] - mov r0, r0, asl #1 - ldrh r2, [r3, r0] - add r2, r2, #1 - strh r2, [r3, r0] @ movhi -.L1887: - add r4, r4, #1 + ldr r3, .L1971 + ldrb r2, [r3, #928] @ zero_extendqisi2 + cmp r2, #0 + bne .L1961 + add r3, r3, r0, asl #1 + movw r2, #3076 + ldrh r8, [r3, r2] + b .L1953 .L1886: - ldr r3, [r6, #3976] - cmp r4, r3 - bcc .L1888 - mov r4, #0 - ldr r7, .L1892 - ldr r5, .L1892+12 - movw r8, #65535 + mov r1, #0 + bl FtlGetLastWrittenPage + cmn r0, #1 + mov r7, r0 + beq .L1887 +.L1961: + mov r8, r7 +.L1953: + ldr r3, .L1971 + movw r2, #3848 + mov r5, #0 + str r4, [sp, #32] + movw ip, #65535 + ldrh r9, [r3, r2] + ldr r2, .L1971+4 + ldr sl, [r2, #-972] + ldr r6, [r2, #-1168] + movw r2, #3928 + ldrh lr, [r3, r2] + mov r2, r4 + mov r3, r5 b .L1889 +.L1887: + mov r3, #0 + strh r3, [r4, #2] @ movhi + mov r2, r3 @ movhi +.L1968: + strb r2, [r4, #6] + b .L1882 .L1891: - ldr r3, [r5, #-2016] - mov r6, r4, asl #1 - ldrh r2, [r3, r6] - ldr r3, [r5, #-916] - ldrh r3, [r3, r6] - cmp r2, r3 - beq .L1890 - cmp r2, r8 - beq .L1890 - ldr r0, .L1892+16 - mov r1, r4 - bl printk - ldr r3, .L1892+20 - ldrh r3, [r5, r3] - cmp r3, r4 - beq .L1890 - ldr r3, .L1892+24 - ldrh r3, [r5, r3] - cmp r3, r4 - beq .L1890 - ldr r3, .L1892+28 - ldrh r3, [r5, r3] - cmp r3, r4 + ldrh r0, [r2, #16] + cmp r0, ip beq .L1890 - ldr r3, [r5, #-916] - mov r0, r4 - ldrh r2, [r3, r6] - ldr r3, [r5, #-2016] - strh r2, [r3, r6] @ movhi - bl update_vpc_list - bl l2p_flush - bl FtlVpcTblFlush + mov fp, #36 + orr r0, r8, r0, asl #10 + mla r1, fp, r5, sl + str r0, [r1, #4] + mov r0, #0 + str r0, [r1, #8] + mul r0, lr, r5 + add r5, r5, #1 + uxth r5, r5 + add fp, r0, #3 + cmp r0, #0 + movlt r0, fp + bic r0, r0, #3 + add r0, r6, r0 + str r0, [r1, #12] .L1890: - add r4, r4, #1 - uxth r4, r4 + add r3, r3, #1 + add r2, r2, #2 + uxth r3, r3 .L1889: - mov r3, #3856 - ldrh r3, [r7, r3] - cmp r3, r4 - bhi .L1891 - ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, pc} -.L1893: - .align 2 -.L1892: - .word .LANCHOR0 - .word .LANCHOR3+15 - .word .LC128 - .word .LANCHOR2 - .word .LC129 - .word -1996 - .word -1900 - .word -1948 - .fnend - .size FtlVpcCheckAndModify, .-FtlVpcCheckAndModify - .align 2 - .global allocate_new_data_superblock - .type allocate_new_data_superblock, %function -allocate_new_data_superblock: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L1906 - stmfd sp!, {r4, r5, r6, lr} - .save {r4, r5, r6, lr} - mov r4, r0 - ldr r2, [r3, #-2088] - ldrh r5, [r0, #0] + cmp r3, r9 + bne .L1891 + ldrb r3, [r4, #8] @ zero_extendqisi2 + cmp r3, #1 + movne r3, #0 + bne .L1962 + ldr r3, .L1971 + ldrb r3, [r3, #928] @ zero_extendqisi2 + adds r3, r3, #0 + movne r3, #1 +.L1962: + ldr r6, .L1971+4 + mov r1, r5 + str r3, [sp, #20] + mov sl, #0 + ldr r2, [sp, #20] + ldr r0, [r6, #-972] + bl FlashReadPages + ldr fp, [r6, #-1800] + movw ip, #65535 + str ip, [sp, #4] + str fp, [sp, #8] + b .L1893 +.L1898: + mov lr, #36 + ldr r1, [r6, #-972] + mul r2, lr, sl + add r3, r1, r2 + ldr r2, [r1, r2] cmp r2, #0 - bne .L1895 - movw r2, #65535 - cmp r5, r2 - beq .L1896 - ldr r2, [r3, #-2016] - mov r3, r5, asl #1 - mov r0, r5 - ldrh r3, [r2, r3] - cmp r3, #0 - beq .L1897 - bl INSERT_DATA_LIST + bne .L1894 + ldr r3, [r3, #12] + ldr fp, [r3, #4] + cmn fp, #1 + beq .L1895 + ldr r1, [r6, #-1800] + mov r0, fp + str r3, [sp, #0] + bl ftl_cmp_data_ver + ldr r3, [sp, #0] + cmp r0, #0 + addne fp, fp, #1 + strne fp, [r6, #-1800] +.L1895: + ldr r3, [r3, #0] + cmn r3, #1 + bne .L1897 b .L1896 +.L1894: + ldr r1, [r3, #4] + movw fp, #294 + ldr r0, .L1971+8 + bl printk + ldrh r3, [r4, #0] + uxth r2, r8 + str r2, [sp, #4] + strh r3, [r6, fp] @ movhi .L1897: - bl INSERT_FREE_LIST + add sl, sl, #1 +.L1893: + uxth r9, sl + cmp r9, r5 + bcc .L1898 .L1896: - mov r3, #0 - strb r3, [r4, #8] - ldr r3, .L1906+4 - cmp r4, r3 - beq .L1898 - ldr r2, .L1906+8 - movw r3, #3868 - ldrh r3, [r2, r3] - cmp r3, #1 - beq .L1898 - ldrb r2, [r2, #928] @ zero_extendqisi2 - cmp r2, #0 - beq .L1899 -.L1898: - mov r3, #1 - strb r3, [r4, #8] - b .L1900 -.L1899: - ldr r2, .L1906+12 - cmp r4, r2 - bne .L1900 - cmp r3, #3 - ldr r3, .L1906 - beq .L1901 - ldr r2, [r3, #-1712] + ldr r3, .L1971+4 + cmp r9, r5 + addeq r7, r7, #1 + uxthne r7, r7 + movne r2, #36 + ldrne r3, [r3, #-972] + uxtheq r7, r7 + ldreq r3, [r3, #-972] + mlane r9, r2, r9, r3 + ldreq r0, [r3, #4] + ldrne r0, [r9, #4] + ubfx r0, r0, #10, #16 + bl P2V_plane + ldrb r2, [r4, #8] @ zero_extendqisi2 + ldr r3, .L1971 cmp r2, #1 - bne .L1902 + str r0, [sp, #16] + bne .L1901 + ldrb r1, [r3, #928] @ zero_extendqisi2 + cmp r1, #0 + addeq r7, r3, r7, asl #1 + movweq r1, #3076 + ldreqh r7, [r7, r1] .L1901: - mov r2, #1 - strb r2, [r3, #-1988] -.L1902: - ldr r2, .L1906+8 - ldr r2, [r2, #3840] - cmp r2, #0 - beq .L1900 - ldr r3, [r3, #-1780] - cmp r3, #29 - ldrls r3, .L1906 - movls r2, #1 - strlsb r2, [r3, #-1988] -.L1900: - ldr r3, .L1906+16 - ldr r6, .L1906 - ldrh r0, [r6, r3] + movw r1, #3916 + ldr ip, [sp, #12] + ldrh r3, [r3, r1] + ldr fp, [sp, #24] + cmp r3, r7 + streqh r7, [r4, #2] @ movhi + moveq r3, #0 + streqb r3, [r4, #6] + streqh r3, [r4, #4] @ movhi + ldr r3, [sp, #16] + cmp r7, ip + cmpeq r3, fp + beq .L1969 +.L1903: + ldr fp, [sp, #4] movw r3, #65535 - cmp r0, r3 - beq .L1903 - cmp r5, r0 + ldr ip, [sp, #8] + cmp fp, r3 + sub r6, ip, #1 bne .L1904 - ldr r2, [r6, #-2016] - mov r3, r0, asl #1 - ldrh r3, [r2, r3] - cmp r3, #0 - beq .L1905 + cmp r2, #0 + bne .L1905 .L1904: - bl update_vpc_list -.L1905: - ldr r3, .L1906+16 - mvn r2, #0 - strh r2, [r6, r3] @ movhi -.L1903: - mov r0, r4 - bl allocate_data_superblock - bl l2p_flush - mov r0, #0 - bl FtlEctTblFlush - bl FtlVpcTblFlush -.L1895: - mov r0, #0 - ldmfd sp!, {r4, r5, r6, pc} -.L1907: - .align 2 -.L1906: - .word .LANCHOR2 - .word .LANCHOR2-1948 - .word .LANCHOR0 - .word .LANCHOR2-1996 - .word -1020 - .fnend - .size allocate_new_data_superblock, .-allocate_new_data_superblock - .align 2 - .type ftl_do_gc.part.21, %function -ftl_do_gc.part.21: - .fnstart - @ args = 0, pretend = 0, frame = 24 - @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2005 - movw ip, #65535 - ldr r2, .L2005+4 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} - .pad #36 - sub sp, sp, #36 - mov sl, r1 - str r0, [sp, #16] - ldrh r0, [r3, r2] - cmp r0, ip + ldr r2, .L1971+4 + uxth r3, r8 + ldr ip, [sp, #12] + mvn fp, #0 + mov sl, r3 + mov r9, fp + ldr r1, [r2, #-1008] + ldr r8, .L1971+4 + cmn r1, #1 + streq r6, [r2, #-1008] + ldr r2, [r2, #-1008] + str r2, [sp, #4] + add r2, ip, #7 + cmp r3, r2 + subgt r5, r3, #7 + mov r3, r7 + ldrle r5, [sp, #12] + mov r7, r6 + uxthgt r5, r5 + b .L1908 +.L1910: + ldrh r0, [r1, #16] + movw lr, #65535 + cmp r0, lr beq .L1909 - ldr r1, .L2005+8 - ldrh r4, [r3, r1] - cmp r4, ip - streqh r0, [r3, r1] @ movhi - mvneq r1, #0 - streqh r1, [r3, r2] @ movhi + ldr ip, [sp, #8] + mov r3, #36 + orr r0, r5, r0, asl #10 + mla lr, r3, r6, ip + add r6, r6, #1 + uxth r6, r6 + str r0, [lr, #4] .L1909: - ldr r1, [sp, #16] - ldr r2, [r3, #-1192] - cmp r1, #1 add r2, r2, #1 - add r2, r2, r1, asl #7 - str r2, [r3, #-1192] - bne .L1910 - ldr r3, .L2005+12 - ldr r1, [r3, #3840] - cmp r1, #0 - bne .L1911 - ldrb r3, [r3, #928] @ zero_extendqisi2 - cmp r3, #0 - beq .L1910 -.L1911: - ldr r4, .L2005 - ldr r3, [r4, #-1780] - cmp r3, #29 - bhi .L1910 - mov r3, #432 - ldrh r3, [r4, r3] - add r2, r2, r3 - str r2, [r4, #-1192] - bl FtlGcReFreshBadBlk - ldr r3, .L2005+16 - movw r2, #65535 - ldrh r3, [r4, r3] - cmp r3, r2 - bne .L1910 - ldr r2, .L2005+8 - ldrh r2, [r4, r2] - cmp r2, r3 + add r1, r1, #2 + uxth r2, r2 +.L1921: + ldr lr, [sp, #36] + cmp r2, lr bne .L1910 - ldr r3, [r4, #-1192] - cmp r3, #1024 - bhi .L1912 - ldr r3, .L2005+20 - ldrh r3, [r4, r3] - cmp r3, #63 - bhi .L1910 -.L1912: - ldr r3, .L2005 - mov r2, #432 - ldr r0, .L2005+20 + ldr r3, [sp, #28] + mov r1, r6 + ldr r0, [r8, #-972] + ldr r2, [sp, #20] + str r3, [sp, #0] + bl FlashReadPages + ldr r2, .L1971 + add r0, r8, r5, asl #1 mov r1, #0 - strh r1, [r3, r2] @ movhi - ldrh ip, [r3, r0] - ldr r0, .L2005+24 - ldrh r0, [r3, r0] - add r0, r0, #64 - cmp ip, r0 - bgt .L1910 - str r1, [r3, #-1192] - ldr r1, [r3, #-1780] - cmp r1, #0 - moveq r1, #6 - beq .L2001 - cmp r1, #5 - bhi .L1914 - mov r1, #18 -.L2001: - strh r1, [r3, r2] @ movhi -.L1914: - mov r0, #32 - movw r7, #65535 - bl List_get_gc_head_node - uxth r2, r0 - cmp r2, r7 - beq .L1915 - ldr r5, .L2005 - ldr r6, .L2005+28 - ldrh r0, [r5, r6] + str r0, [sp, #8] + ldr r3, [sp, #0] + ldrb ip, [r2, #928] @ zero_extendqisi2 + ldr r2, [r8, #-972] + str ip, [sp, #28] + b .L1911 +.L1919: + ldr r0, [r2, #0] cmp r0, #0 - moveq r3, #1 - streqh r3, [r5, r6] @ movhi - beq .L1915 - ldr r3, .L2005+12 - movw ip, #3918 - movw lr, #3848 - ldr r9, [r5, #-2016] - mov r2, r2, asl #1 - ldrh ip, [r3, ip] - ldrh r3, [r3, lr] - ldrh r1, [r9, r2] - mul r3, r3, ip - add r3, r3, #1 - cmp r1, r3 - bgt .L1915 - add fp, r0, #1 - mov r8, #0 - str r8, [r5, #-1184] - uxth fp, fp - strh fp, [r5, r6] @ movhi - str r2, [sp, #8] - bl List_get_gc_head_node - ldr r2, [sp, #8] - uxth r4, r0 - cmp r4, r7 - beq .L1915 - ldrh r2, [r9, r2] - mov r7, r4, asl #1 - ldr r0, .L2005+32 - mov r1, fp - ldrh r3, [r9, r7] - str r2, [sp, #0] - mov r2, r4 - bl printk - ldrh r3, [r5, r6] - cmp r3, #40 - bls .L1917 - ldr r3, [r5, #-2016] - ldrh r3, [r3, r7] - cmp r3, #32 - strhih r8, [r5, r6] @ movhi -.L1917: - ldr r2, .L2005 - mov r3, #432 - mov r1, #6 - strh r1, [r2, r3] @ movhi - b .L1919 -.L1915: - bl GetSwlReplaceBlock - movw r3, #65535 - cmp r0, r3 - mov r4, r0 - bne .L1919 - ldr r2, .L2005 - mov r3, #432 - mov r1, #0 - strh r1, [r2, r3] @ movhi -.L1910: - ldr r5, .L2005 - movw r4, #65535 - ldr r3, .L2005+16 - ldrh r2, [r5, r3] - cmp r2, r4 - bne .L1919 - sub r3, r3, #140 - ldrh r3, [r5, r3] - cmp r3, r2 - movne r4, r2 - bne .L1919 - ldr r2, .L2005+8 - ldrh r7, [r5, r2] - cmp r7, r3 - movne r4, r3 - bne .L1919 - ldr r8, .L2005+20 - ldr r2, [r5, #-1192] - ldrh r3, [r5, r8] - cmp r3, #23 - movhi r3, #1024 - movls r3, #5120 - cmp r2, r3 - movls r4, r7 - bls .L1919 - mov r2, #432 - mov r3, #0 - str r3, [r5, #-1192] - mov r6, r5 - strh r3, [r5, r2] @ movhi - bl GetSwlReplaceBlock - cmp r0, r7 - mov r4, r0 - bne .L1921 - ldr r3, .L2005+24 - ldrh r1, [r5, r8] - ldrh r2, [r5, r3] - cmp r1, r2 - movcs r2, #80 - strcsh r2, [r5, r3] @ movhi - bcs .L1931 - mov r0, #64 - bl List_get_gc_head_node - uxth r3, r0 - cmp r3, r4 - beq .L1931 - ldr r2, [r5, #-1000] + bne .L1912 + ldr r0, [r2, #12] + movw ip, #65535 + ldrh lr, [r0, #0] + cmp lr, ip + beq .L1913 + ldr r0, [r0, #4] + cmn r0, #1 + beq .L1913 + cmn fp, #1 + ldr r9, [r8, #-1008] + str r0, [r8, #-1008] + bne .L1913 + ldr lr, [sp, #8] + sub r0, lr, #892 + ldrh r0, [r0, #0] + cmp r0, ip + bne .L1914 + ldr r0, [sp, #28] + cmp r0, #0 + beq .L1913 +.L1914: + cmp r9, r7 + mvneq fp, #0 + movne fp, r9 + b .L1913 +.L1912: + mov r6, r7 + ldrh r1, [r4, #0] + mov r7, r3 + ldr r3, .L1971+4 + movw r2, #294 + strh r1, [r3, r2] @ movhi + ldrb r2, [r4, #8] @ zero_extendqisi2 cmp r2, #0 - bne .L1924 - ldr r2, .L2005+12 - movw r1, #3868 - ldrh r1, [r2, r1] - cmp r1, #3 + bne .L1905 + add r5, r3, r5, asl #1 + movw r2, #65535 + sub r5, r5, #892 + ldrh r1, [r5, #0] + cmp r1, r2 + bne .L1915 + cmn fp, #1 + bne .L1964 +.L1916: + ldr fp, [sp, #4] + cmp fp, r6 + beq .L1917 +.L1964: + str fp, [r3, #-1008] + b .L1905 +.L1917: + ldr r2, [r3, #-1008] + b .L1970 +.L1915: + cmp r9, r6 + beq .L1918 + cmn r9, #1 + strne r9, [r3, #-1008] + b .L1905 +.L1918: + ldr r2, [r3, #-1008] + cmp r2, r6 + beq .L1905 +.L1970: + sub r2, r2, #1 + b .L1965 +.L1913: + add r1, r1, #1 + add r2, r2, #36 + uxth r1, r1 +.L1911: + cmp r1, r6 + bne .L1919 + add r5, r5, #1 + uxth r5, r5 +.L1908: + cmp r5, sl + bhi .L1920 + ldr r1, .L1971 + movw r2, #3848 + ldr lr, [r8, #-972] + mov r6, #0 + str r3, [sp, #28] + ldrh ip, [r1, r2] + mov r1, r4 + str lr, [sp, #8] + mov r2, r6 + str ip, [sp, #36] + b .L1921 +.L1920: + mov r6, r7 + mov r7, r3 + ldr r3, .L1971+4 + mvn r2, #0 +.L1965: + str r2, [r3, #-1008] +.L1905: + ldr r5, .L1971+4 + mov r3, #296 + mov r2, #1 + sub r0, r5, #1088 + strh r2, [r5, r3] @ movhi + bl FtlMapBlkWriteDumpData + ldr r8, [sp, #12] + str r7, [sp, #8] +.L1922: + ldr r3, .L1971 + movw r2, #3848 + mov r7, #0 + ldr lr, [r5, #-972] + mov fp, #36 + ldrh sl, [r3, r2] + mov r2, r4 + ldrb ip, [r3, #928] @ zero_extendqisi2 + mov r3, r7 + b .L1923 +.L1926: + ldrh r0, [r2, #16] + movw r1, #65535 + cmp r0, r1 beq .L1924 - ldr r1, [r5, #-1712] - cmp r1, #0 - bne .L1924 - ldr r1, [r2, #3840] - cmp r1, #0 - bne .L1924 - ldrb r0, [r2, #928] @ zero_extendqisi2 - cmp r0, #0 - beq .L1925 + mla r1, fp, r7, lr + orr r0, r8, r0, asl #10 + str r0, [r1, #4] + ldrb r9, [r4, #8] @ zero_extendqisi2 + cmp r9, #1 + bne .L1925 + cmp ip, #0 + orrne r0, r0, #-2147483648 + strne r0, [r1, #4] +.L1925: + add r7, r7, #1 + uxth r7, r7 .L1924: - ldr r1, .L2005 - mov r3, r3, asl #1 - movw ip, #3848 - movw lr, #3868 - ldr r2, [r1, #-2016] - ldrh r0, [r2, r3] - movw r2, #3918 - ldr r3, .L2005+12 - ldrh r2, [r3, r2] - ldrh ip, [r3, ip] - ldrh r3, [r3, lr] - mul ip, ip, r2 - cmp r3, #3 - moveq r3, r2, lsr #1 + add r3, r3, #1 + add r2, r2, #2 + uxth r3, r3 +.L1923: + cmp r3, sl + bne .L1926 + mov r1, r7 + ldr r0, [r5, #-972] + ldr r2, [sp, #20] + bl FlashReadPages + mov r3, #36 + mul r3, r3, r7 + mov r7, #0 + str r3, [sp, #36] + b .L1927 +.L1948: + ldr r9, [r5, #-972] + add r9, r9, r7 + ldr sl, [r9, #4] + ubfx r0, sl, #10, #16 + str sl, [sp, #52] + bl P2V_plane + ldr r3, [sp, #12] + cmp r8, r3 + bcc .L1928 + ldr fp, [sp, #24] + mov ip, r3 + cmp r0, fp + movcs r3, #0 + movcc r3, #1 + cmp r8, ip movne r3, #0 - add r3, ip, r3 + cmp r3, #0 + bne .L1928 + ldr r3, [sp, #16] + ldr ip, [sp, #8] cmp r0, r3 - bgt .L1927 - mov r0, #0 - bl List_get_gc_head_node - ldr r2, .L2005+12 - ldr r3, .L2005 - ldr r2, [r2, #3976] - ldr r1, [r3, #-1844] - add r2, r2, r2, asl #1 - cmp r1, r2, lsr #2 - ldr r2, .L2005+24 - movhi r1, #128 - movls r1, #160 - strh r1, [r3, r2] @ movhi - uxth r4, r0 - b .L1929 -.L1927: - ldr r3, .L2005+24 - mov r2, #128 - strh r2, [r1, r3] @ movhi - b .L1931 -.L1925: - ldr r2, [r5, #-2016] - mov r3, r3, asl #1 - ldr r6, .L2005 - ldr r5, .L2005+24 - ldrh r3, [r2, r3] - cmp r3, #7 - movhi r3, #64 - strhih r3, [r6, r5] @ movhi - bhi .L1931 - bl List_get_gc_head_node - mov r3, #128 - strh r3, [r6, r5] @ movhi - uxth r4, r0 -.L1929: - movw r3, #65535 - cmp r4, r3 - beq .L1931 -.L1921: - ldr r1, .L2005 - mov r0, r4, asl #1 - ldr r3, .L2005+20 - ldr ip, [r1, #-2080] - ldrh r2, [r1, r3] - ldr r3, [r1, #-2016] - ldrh r3, [r3, r0] - ldrh r0, [ip, r0] - str r0, [sp, #0] - ldr r0, .L2005+36 - ldrh r1, [r1, r0] - ldr r0, .L2005+40 - str r1, [sp, #4] - mov r1, r4 - bl printk + cmpeq r8, ip + beq .L1960 + ldr r3, [r9, #0] + cmn r3, #1 + beq .L1930 + ldr sl, [r9, #12] + movw r3, #61589 + ldrh r2, [sl, #0] + cmp r2, r3 + bne .L1937 .L1931: - bl FtlGcReFreshBadBlk -.L1919: - movw r0, #65535 - rsb ip, r0, r4 - rsbs r1, ip, #0 - ldr r3, [sp, #16] - adc r1, r1, ip - ldr r5, .L2005 - cmp r3, #0 - movne r2, #0 - andeq r2, r1, #1 - cmp r2, #0 + ldr r6, [sl, #4] + cmn r6, #1 beq .L1932 - ldr r3, .L2005+20 - ldrh r2, [r5, r3] - cmp r2, #24 - movhi r6, #1 - bhi .L1933 - ldr r1, .L2005+12 - movw r3, #3916 - cmp r2, #16 - ldrh r6, [r1, r3] - movhi r6, r6, lsr #5 - bhi .L1933 - cmp r2, #12 - movhi r6, r6, lsr #4 - bhi .L1933 - cmp r2, #8 - movhi r6, r6, lsr #2 -.L1933: - ldr r1, .L2005+36 - ldr r3, .L2005 - ldrh r0, [r5, r1] - cmp r0, r2 - mov r0, r1 - bcs .L1937 - ldr r2, .L2005+44 - movw ip, #65535 - ldrh r2, [r3, r2] - cmp r2, ip - bne .L1938 - ldr ip, .L2005+8 - ldrh ip, [r3, ip] - cmp ip, r2 - bne .L1938 - mov r2, #432 - ldrh r0, [r3, r2] + ldr r1, [r5, #-1800] + mov r0, r6 + bl ftl_cmp_data_ver cmp r0, #0 - bne .L1939 - ldr r2, .L2005+12 - ldr ip, [r3, #-1844] - ldr r2, [r2, #3976] - add r2, r2, r2, asl #1 - cmp ip, r2, lsr #2 - movcs r2, #18 - bcs .L2003 -.L1939: - ldr r3, .L2005 - ldr r2, .L2005+48 - ldr r1, .L2005+36 - ldrh r2, [r3, r2] - add r2, r2, r2, asl #1 - mov r2, r2, asr #2 -.L2003: - strh r2, [r3, r1] @ movhi + addne r3, r6, #1 + strne r3, [r5, #-1800] +.L1932: + ldr r9, [sl, #8] + add r1, sp, #48 + ldr r3, [sl, #12] + mov r2, #0 + mov r0, r9 + str r3, [sp, #44] + bl log2phys + ldr r1, [r5, #-1008] + cmn r1, #1 + beq .L1933 + mov r0, r6 + bl ftl_cmp_data_ver + cmp r0, #0 + beq .L1933 + ldr r3, [sp, #44] + cmn r3, #1 + beq .L1934 + ldr r0, [r5, #-972] + mov r1, #1 mov r2, #0 - ldr r3, .L2005 - str r2, [r3, #-1184] - b .L1942 -.L1938: - ldr r3, .L2005 - ldr r2, .L2005+48 - ldrh r2, [r3, r2] - add r2, r2, r2, asl #1 - mov r2, r2, asr #2 - strh r2, [r3, r0] @ movhi + add r0, r0, r7 + ldr fp, [r0, #12] + str r3, [r0, #4] + str fp, [sp, #4] + bl FlashReadPages + ldr r3, [r5, #-972] + ldr ip, [fp, #4] + add fp, r3, r7 + ldr r3, [r3, r7] + str ip, [sp, #28] + cmn r3, #1 + bne .L1935 + b .L1936 +.L1934: + ldr r3, [sp, #52] + ldr r2, [sp, #48] + cmp r2, r3 + bne .L1937 + mov r0, r9 + add r1, sp, #44 + mov r2, #1 + bl log2phys .L1937: - ldr r3, .L2005+12 - cmp sl, #2 - movw r4, #65535 - movhi sl, #0 - movls sl, #1 - ldr r3, [r3, #3840] - cmp r3, #0 - moveq sl, #0 - cmp sl, #0 - addne r6, r6, #1 - uxthne r6, r6 + ldrh r0, [r4, #0] + b .L1967 +.L1935: + ldr r3, [sp, #4] + ldr sl, [r3, #8] + cmp sl, r9 + bne .L1936 + ldr r0, [r5, #-1008] + ldr r1, [sp, #28] + bl ftl_cmp_data_ver + cmp r0, #0 + beq .L1936 + ldr r3, [sp, #48] + ldr r2, [sp, #52] + cmp r3, r2 + beq .L1941 +.L1938: + ldr r2, [sp, #44] + cmp r3, r2 + beq .L1936 + cmn r3, #1 + streq r3, [fp, #0] + beq .L1940 + ldr ip, [fp, #12] + mov r0, fp + str r3, [fp, #4] + mov r1, #1 + mov r2, #0 + str ip, [sp, #4] + bl FlashReadPages +.L1940: + ldr r3, [r5, #-972] + ldr r3, [r3, r7] + cmn r3, #1 + beq .L1941 + ldr r3, [sp, #4] + ldr r0, [r5, #-1008] + ldr r9, [r3, #4] + mov r1, r9 + bl ftl_cmp_data_ver + cmp r0, #0 + beq .L1941 + ldr r0, [sp, #28] + mov r1, r9 + bl ftl_cmp_data_ver + cmp r0, #0 + beq .L1936 +.L1941: + mov r0, sl + ldr r1, [sp, #44] + bl FtlReUsePrevPpa +.L1936: + ldrh r0, [r4, #0] + mvn r3, #0 + str r3, [sp, #44] + bl decrement_vpc_count b .L1943 -.L1932: - ldr r3, .L2005+44 +.L1933: + ldr r3, [sp, #52] + ldr r2, [sp, #48] + cmp r2, r3 + beq .L1943 + mov r0, r9 + add r1, sp, #52 + mov r2, #1 + bl log2phys + ldr fp, [sp, #48] + cmn fp, #1 + beq .L1943 + ldr r3, [sp, #44] + cmp fp, r3 + beq .L1943 + ubfx r0, fp, #10, #16 + bl P2V_block_in_plane + ldr r3, .L1971+12 ldrh r3, [r5, r3] cmp r3, r0 - bne .L1944 - ldr r0, .L2005+8 - ldrh r0, [r5, r0] - cmp r0, r3 - movne r1, #0 - andeq r1, r1, #1 - cmp r1, #0 beq .L1944 - ldr r1, .L2005+16 - ldrh r4, [r5, r1] - cmp r4, r3 - movne r4, r3 - bne .L1944 - ldr r3, .L2005+20 - mov r6, #432 - str r2, [r5, #-1184] - ldrh r7, [r5, r3] - add r3, r3, #804 - ldrh r2, [r5, r3] - cmp r2, r7 - bcs .L1945 - ldrh r2, [r5, r6] - cmp r2, #0 - bne .L1946 - ldr r2, .L2005+12 - ldr r1, [r5, #-1844] - ldr r2, [r2, #3976] - add r2, r2, r2, asl #1 - cmp r1, r2, lsr #2 - movcs r2, #18 - strcsh r2, [r5, r3] @ movhi - bcs .L1948 -.L1946: - ldr r3, .L2005 - ldr r2, .L2005+48 - ldr r1, .L2005+36 - ldrh r2, [r3, r2] - add r2, r2, r2, asl #1 - mov r2, r2, asr #2 - strh r2, [r3, r1] @ movhi -.L1948: - bl FtlReadRefresh - mov r3, #432 - ldr r2, .L2005 - b .L2004 -.L1945: - ldrh r0, [r5, r6] - cmp r0, #0 - bne .L1944 - ldr r2, .L2005+48 - ldrh r4, [r5, r2] - add r2, r4, r4, asl #1 - mov r2, r2, asr #2 - strh r2, [r5, r3] @ movhi - bl List_get_gc_head_node - ldr r3, [r5, #-2016] - ldr r1, .L2005+12 - movw r2, #3918 - ldrh r2, [r1, r2] - uxth r0, r0 - mov r0, r0, asl #1 - ldrh r3, [r3, r0] - movw r0, #3848 - ldrh r1, [r1, r0] - mul r2, r1, r2 - add r2, r2, r2, lsr #31 - cmp r3, r2, asr #1 - ble .L1949 - sub r4, r4, #1 - cmp r7, r4 - blt .L1949 - bl FtlReadRefresh - ldrh r0, [r5, r6] - b .L1942 -.L1949: - cmp r3, #0 - movwne r4, #65535 - bne .L1944 - movw r0, #65535 - bl decrement_vpc_count - ldr r3, .L2005+20 - ldr r2, .L2005 - ldrh r0, [r2, r3] - add r0, r0, #1 - b .L1942 + ldr r3, .L1971+16 + ldrh r3, [r5, r3] + cmp r3, r0 + beq .L1944 + ldr r3, .L1971+20 + ldrh r3, [r5, r3] + cmp r3, r0 + bne .L1943 .L1944: - ldr r3, .L2005+12 - ldr r6, [r3, #3840] - cmp r6, #0 - movne r6, #2 - moveq r6, #1 -.L1943: - ldr r3, .L2005 - movw r0, #65535 - ldr r2, .L2005+16 - ldrh r1, [r3, r2] - cmp r1, r0 - bne .L1950 - cmp r4, r1 - strneh r4, [r3, r2] @ movhi - bne .L1952 - ldr r2, .L2005+8 - ldrh r1, [r3, r2] - cmp r1, r4 - beq .L1952 - ldr r0, [r3, #-2016] - mov r1, r1, asl #1 - ldrh r1, [r0, r1] - cmp r1, #0 - mvneq r1, #0 - streqh r1, [r3, r2] @ movhi - ldr r3, .L2005 - ldr r1, .L2005+16 - ldrh r0, [r3, r2] - strh r0, [r3, r1] @ movhi - mvn r1, #0 - strh r1, [r3, r2] @ movhi -.L1952: - ldr r5, .L2005 - mov r3, #0 - ldr r7, .L2005+16 - strb r3, [r5, #-1752] - movw r3, #65535 - ldrh r0, [r5, r7] - cmp r0, r3 - beq .L1950 - bl IsBlkInGcList - cmp r0, #0 - mvnne r3, #0 - strneh r3, [r5, r7] @ movhi - ldr r3, .L2005+12 - ldr r7, .L2005 - ldrb r3, [r3, #928] @ zero_extendqisi2 - cmp r3, #0 - beq .L1955 - ldr r3, .L2005+16 - ldrh r0, [r7, r3] - bl ftl_get_blk_mode - strb r0, [r7, #-1752] -.L1955: - ldr r8, .L2005+16 - movw r3, #65535 - ldr r5, .L2005 - ldrh r2, [r7, r8] - cmp r2, r3 - beq .L1950 - add r0, r5, r8 - bl make_superblock - ldr r1, .L2005+52 - movw r2, #434 - mov r3, #0 - strh r3, [r5, r2] @ movhi - strh r3, [r5, r1] @ movhi - strb r3, [r5, #-1754] - ldrh r3, [r5, r8] - ldr r2, [r5, #-2016] - mov r3, r3, asl #1 - ldrh r2, [r2, r3] - mov r3, #436 - strh r2, [r5, r3] @ movhi -.L1950: - ldr r3, .L2005 - ldr r2, .L2005+16 - ldrh r1, [r3, r2] - sub r2, r2, #236 - ldrh r2, [r3, r2] - cmp r2, r1 - mov r2, r3 - beq .L1956 - ldr r0, .L2005+56 - ldrh r3, [r3, r0] - cmp r3, r1 - movne fp, r4 - bne .L2000 -.L1957: -.L1956: - ldr r3, .L2005+16 - mvn r1, #0 - strh r1, [r2, r3] @ movhi - mov r3, #432 -.L2004: - ldrh r0, [r2, r3] - b .L1942 -.L2000: - ldr r4, .L2005 - movw sl, #65535 - ldr r3, .L2005+16 - ldrh r3, [r4, r3] - cmp r3, sl - bne .L1959 - ldr r5, .L2005+28 - mov r3, #0 - str r3, [r4, #-1184] -.L1999: - ldrh r8, [r4, r5] - mov r0, r8 - bl List_get_gc_head_node - ldr r3, .L2005+16 - movw r1, #65535 - uxth r7, r0 - strh r7, [r4, r3] @ movhi - cmp r7, r1 - bne .L1961 - ldr r2, .L2005 - add r3, r3, #572 - mov r1, #0 - mov r0, #8 - strh r1, [r2, r3] @ movhi - b .L1942 -.L1961: - mov r0, r7 - bl IsBlkInGcList + ldr ip, .L1971+4 + mov r1, #1 + mov r2, #0 + ldr r0, [ip, #-972] + str fp, [r0, #4] + ldr sl, [r0, #12] + bl FlashReadPages + ldr r0, .L1971+4 + ldr r1, [sl, #4] + ldr r3, [r0, #-972] + ldr r3, [r3, #0] + cmn r3, #1 + beq .L1943 + mov r0, r6 + bl ftl_cmp_data_ver cmp r0, #0 - add r0, r8, #1 - strneh r0, [r4, r5] @ movhi - bne .L1999 - ldr ip, .L2005+12 - movw r8, #3916 - movw sl, #3848 - ldr r2, [r4, #-2016] - mov r3, r7, asl #1 - uxth r0, r0 - ldrh r8, [ip, r8] - ldrh ip, [ip, sl] - strh r0, [r4, r5] @ movhi - ldrh r1, [r2, r3] - mul r8, ip, r8 - add ip, r8, r8, lsr #31 - cmp r1, ip, asr #1 - bgt .L1964 - cmp r0, #48 - bls .L1965 - cmp r1, #8 - bls .L1965 - ldr r1, .L2005+60 - ldrh r1, [r4, r1] - cmp r1, #35 - bhi .L1965 -.L1964: - mov r1, #0 - strh r1, [r4, r5] @ movhi -.L1965: + bne .L1943 + mov r0, r9 + add r1, sp, #48 + mov r2, #1 + bl log2phys +.L1943: + ldr r0, [sp, #44] + cmn r0, #1 + beq .L1928 + ubfx r0, r0, #10, #16 + bl P2V_block_in_plane + ldr r2, [r5, #-2016] + mov r3, r0, asl #1 + mov r1, r0 ldrh r3, [r2, r3] - movw r2, #65535 - ldr sl, .L2005 - cmp r3, r8 - cmpge fp, r2 - movne r8, #0 - moveq r8, #1 - bne .L1966 - ldr r3, .L2005+16 - mvn r2, #0 - strh r2, [sl, r3] @ movhi - add r3, r3, #572 - mov r2, #0 - strh r2, [sl, r3] @ movhi - mov r3, #432 - ldrh r0, [sl, r3] - b .L1942 -.L1966: cmp r3, #0 - bne .L1967 - movw r0, #65535 - bl decrement_vpc_count - ldrh r3, [r4, r5] - add r3, r3, #1 - strh r3, [r4, r5] @ movhi - b .L1999 + beq .L1945 .L1967: - ldr r3, .L2005+12 - strb r8, [sl, #-1752] - ldrb r3, [r3, #928] @ zero_extendqisi2 - cmp r3, #0 - beq .L1968 - mov r0, r7 - bl ftl_get_blk_mode - strb r0, [sl, #-1752] -.L1968: - ldr r4, .L2005 - sub r0, r4, #1760 - bl make_superblock - movw r1, #434 - mov r3, #0 - strh r3, [r4, r1] @ movhi - ldr r1, .L2005+16 - ldr r0, [r4, #-2016] - ldrh r1, [r4, r1] - mov r1, r1, asl #1 - ldrh r0, [r0, r1] - mov r1, #436 - strb r3, [r4, #-1754] - strh r0, [r4, r1] @ movhi - ldr r1, .L2005+52 - strh r3, [r4, r1] @ movhi -.L1959: - ldr sl, [sp, #16] - cmp sl, #1 - bne .L1969 - bl FtlReadRefresh -.L1969: - ldr r3, .L2005 - mov r2, #1 - movw r1, #3916 - str r2, [r3, #-996] - ldr r2, .L2005+12 - ldrh r9, [r2, r1] - ldrb r1, [r2, #928] @ zero_extendqisi2 - cmp r1, #0 - beq .L1970 - ldrb r1, [r3, #-1752] @ zero_extendqisi2 - cmp r1, #1 - movweq r1, #3918 - ldreqh r9, [r2, r1] -.L1970: - ldr r2, .L2005+52 - mov r8, #0 - str fp, [sp, #20] - mov fp, r9 - ldr r4, .L2005 + bl decrement_vpc_count + b .L1928 +.L1945: + ldr r0, .L1971+24 + bl printk + b .L1928 +.L1930: + ldrh r3, [r4, #0] + movw r1, #294 + mov r2, r6 + ldr r0, .L1971+28 + strh r3, [r5, r1] @ movhi + mov r1, sl + bl printk + ldr r3, [r5, #300] + cmp r3, #31 + addls r2, r5, r3, asl #2 + addls r3, r3, #1 + ldrls r1, [sp, #52] + strls r3, [r5, #300] + strls r1, [r2, #304] + ldrh r0, [r4, #0] + bl decrement_vpc_count + ldr r3, [r5, #-1008] + cmn r3, #1 + beq .L1966 +.L1947: + cmp r3, r6 + bls .L1928 +.L1966: + str r6, [r5, #-1008] +.L1928: + add r7, r7, #36 +.L1927: + ldr r3, [sp, #36] + cmp r7, r3 + bne .L1948 + ldrb r3, [r4, #8] @ zero_extendqisi2 + add r8, r8, #1 + cmp r3, #1 + uxth r8, r8 + bne .L1949 + ldr r3, .L1971 + ldrb r2, [r3, #928] @ zero_extendqisi2 + cmp r2, #0 + beq .L1949 + movw r2, #3918 + ldr ip, [sp, #8] ldrh r3, [r3, r2] - add r2, r3, r6 - cmp r2, r9 - rsbgt r6, r3, r9 - uxthgt r6, r6 - b .L1972 -.L1974: - ldrh r1, [r2, #2]! - movw sl, #65535 + cmp ip, r8 + cmpeq r3, r8 + beq .L1960 +.L1949: + ldr r3, .L1971 + movw r2, #3916 + ldrh r2, [r3, r2] + cmp r8, r2 + bne .L1922 + mov r2, #0 + movw r1, #3848 + strh r2, [r4, #4] @ movhi + ldrh r1, [r3, r1] + mov r3, r2 + strh r8, [r4, #2] @ movhi + movw r2, #65535 + ldr r0, [sp, #32] + b .L1950 +.L1952: + add r0, r0, #2 + ldrh ip, [r0, #14] + cmp ip, r2 + strneb r3, [r4, #6] + bne .L1882 +.L1951: add r3, r3, #1 - cmp r1, sl uxth r3, r3 - orrne r1, ip, r1, asl #10 - mlane sl, r0, r7, lr - addne r7, r7, #1 - uxthne r7, r7 - strne r1, [sl, #4] -.L1980: - cmp r3, r5 - bne .L1974 - ldr r0, [r4, #-1164] - mov r1, r7 - ldrb r2, [r4, #-1752] @ zero_extendqisi2 - mov r5, #0 - bl FlashReadPages - mov r9, r5 - mov sl, r6 - b .L1975 -.L1978: - ldr r3, [r4, #-1164] - add r2, r3, r5 - ldr r3, [r3, r5] - ldr r6, [r2, #12] - cmn r3, #1 - beq .L1976 - ldrh r3, [r6, #0] - movw r1, #61589 +.L1950: cmp r3, r1 - bne .L1976 - add r1, sp, #28 - mov r2, #0 - ldr r0, [r6, #8] - bl log2phys - ldr r1, [r4, #-1164] - ldr r2, [sp, #28] - add r1, r1, r5 - bic r2, r2, #-2147483648 - ldr r3, [r1, #4] - cmp r2, r3 - bne .L1976 - movw r3, #434 - ldr r0, [r4, #-1180] - ldrh r2, [r4, r3] - ldr r1, [r1, #16] - add r2, r2, #1 - strh r2, [r4, r3] @ movhi - ldr r2, [r4, #-968] - mov r3, #36 - mla r2, r3, r0, r2 - str r1, [r2, #16] - str r2, [sp, #8] - str r3, [sp, #12] - bl Ftl_get_new_temp_ppa - ldr r2, [sp, #8] - ldr r1, [r4, #-1180] - str r0, [r2, #4] - ldr r3, [sp, #12] - ldr r2, [r4, #-968] - mla r3, r3, r1, r2 - ldr r2, [r4, #-1164] - add r2, r2, r5 - ldr r1, [r2, #8] - str r1, [r3, #8] - mov r1, #1 - ldr r2, [r2, #12] - str r2, [r3, #12] - ldr r3, [sp, #28] - str r3, [r6, #12] - ldr r3, .L2005+44 - ldrh r3, [r4, r3] - strh r3, [r6, #2] @ movhi - ldr r3, [r4, #-1800] - ldr r0, [r4, #-1164] - str r3, [r6, #4] - add r0, r0, r5 - ldr r3, [r4, #-1180] - add r3, r3, #1 - str r3, [r4, #-1180] - bl FtlGcBufAlloc - ldr r3, .L2005+12 - ldrb r3, [r3, #928] @ zero_extendqisi2 + bne .L1952 + b .L1882 +.L1960: +.L1929: + ldr r7, [sp, #8] + ldr r3, [sp, #16] + strh r7, [r4, #2] @ movhi + strb r3, [r4, #6] +.L1969: + mov r0, r4 + mov r1, r7 + mov r2, r3 + bl ftl_sb_update_avl_pages +.L1882: + mov r0, #0 + add sp, sp, #60 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L1972: + .align 2 +.L1971: + .word .LANCHOR0 + .word .LANCHOR2 + .word .LC144 + .word -1996 + .word -1948 + .word -1900 + .word .LC145 + .word .LC146 + .fnend + .size FtlRecoverySuperblock, .-FtlRecoverySuperblock + .align 2 + .global FtlWriteDumpData + .type FtlWriteDumpData, %function +FtlWriteDumpData: + .fnstart + @ args = 0, pretend = 0, frame = 40 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, r7, r8, sl, lr} + .save {r4, r5, r6, r7, r8, sl, lr} + .pad #44 + sub sp, sp, #44 + ldr r5, .L1982 + ldr r3, [r5, #4040] cmp r3, #0 - bne .L1977 - ldrb r3, [r4, #-1893] @ zero_extendqisi2 - ldr r2, [r4, #-1180] - cmp r2, r3 - beq .L1977 - ldr r3, .L2005+64 + bne .L1973 + ldr r4, .L1982+4 + ldr r3, .L1982+8 + mov r2, r4 ldrh r3, [r4, r3] cmp r3, #0 - bne .L1976 -.L1977: - bl Ftl_gc_temp_data_write_back - cmp r0, #0 - ldrne r3, .L2005 - movne r2, #0 - strne r2, [r3, #-996] - movne r2, #432 - bne .L2004 + beq .L1975 + ldrb r1, [r4, #-1988] @ zero_extendqisi2 + cmp r1, #0 + bne .L1975 + movw r0, #3916 + ldrb r1, [r4, #-1989] @ zero_extendqisi2 + ldrh r0, [r5, r0] + mul r1, r0, r1 + cmp r3, r1 + beq .L1975 + ldrb r8, [r4, #-1986] @ zero_extendqisi2 + movw r3, #3848 + ldr r7, [r5, #3976] + cmp r8, #0 + ldrh r6, [r5, r3] + bne .L1973 + sub r7, r7, #1 + mov r1, sp + mov r2, r8 + mov r0, r7 + bl log2phys + ldr r3, [sp, #0] + ldr r0, [r4, #-960] + ldr r4, [r4, #-936] + cmn r3, #1 + str r3, [sp, #8] + str r7, [sp, #20] + str r0, [sp, #12] + str r4, [sp, #16] + str r8, [r4, #4] + beq .L1976 + add r0, sp, #4 + mov r1, #1 + mov r2, r8 + bl FlashReadPages + b .L1977 .L1976: - add r9, r9, #1 - add r5, r5, #36 - uxth r9, r9 -.L1975: - cmp r9, r7 - bne .L1978 - add r8, r8, #1 - mov r6, sl -.L1972: - uxth r3, r8 - ldr r7, .L2005 - cmp r3, r6 - ldr r3, .L2005+52 - bcs .L1979 - ldr r1, .L2005+12 - movw r2, #3848 - ldrh ip, [r4, r3] - mov r7, #0 - ldr lr, [r4, #-1164] - mov r3, r7 - ldrh r5, [r1, r2] - add ip, ip, r8 - ldr r2, .L2005+68 - mov r0, #36 - b .L1980 -.L1979: - ldrh r2, [r7, r3] - mov r9, fp - ldr fp, [sp, #20] - add r6, r6, r2 - uxth r6, r6 - strh r6, [r7, r3] @ movhi - cmp r6, r9 - bcc .L1981 - ldr r3, [r7, #-1180] + movw r3, #3926 + mov r1, #255 + ldrh r2, [r5, r3] + bl ftl_memset +.L1977: + ldr r3, .L1982+12 + mov r6, r6, asl #2 + ldr r5, .L1982+4 + ldr sl, .L1982+8 + strh r3, [r4, #0] @ movhi + ldr r8, .L1982+16 + b .L1978 +.L1981: + ldrh r3, [r5, sl] cmp r3, #0 - beq .L1982 - bl Ftl_gc_temp_data_write_back - cmp r0, #0 - movne r3, #0 - strne r3, [r7, #-996] - movne r3, #432 - ldrneh r0, [r7, r3] - bne .L1942 -.L1982: - ldr r3, .L2005 - movw r2, #434 - ldrh ip, [r3, r2] - cmp ip, #0 - bne .L1983 - ldr r2, .L2005+16 - ldr r0, [r3, #-2016] - ldrh r1, [r3, r2] - mov r1, r1, asl #1 - ldrh r4, [r0, r1] - cmp r4, #0 - beq .L1983 - strh ip, [r0, r1] @ movhi - ldrh r0, [r3, r2] - bl update_vpc_list - bl FtlCacheWriteBack - bl l2p_flush - bl FtlVpcTblFlush + beq .L1979 + ldr r3, [sp, #8] + sub r6, r6, #1 + str r7, [r4, #8] + ldr r0, .L1982+20 + str r3, [r4, #12] + ldrh r3, [r5, r8] + strh r3, [r4, #2] @ movhi + bl get_new_active_ppa + ldr r3, [r5, #-1800] + mov r2, #0 + mov r1, #1 + str r0, [sp, #8] + add r0, sp, #4 + str r3, [r4, #4] + add r3, r3, #1 + cmn r3, #1 + str r3, [r5, #-1800] + moveq r3, #0 + streq r3, [r5, #-1800] + mov r3, r2 + bl FlashProgPages + ldrh r0, [r5, r8] + bl decrement_vpc_count +.L1978: + cmp r6, #0 + bne .L1981 +.L1979: + ldr r3, .L1982+4 + mov r2, #1 + strb r2, [r3, #-1986] + b .L1973 +.L1975: + mov r3, #0 + strb r3, [r2, #-1986] +.L1973: + add sp, sp, #44 + ldmfd sp!, {r4, r5, r6, r7, r8, sl, pc} .L1983: - ldr r3, .L2005+16 - mvn r1, #0 - ldr r2, .L2005 - strh r1, [r2, r3] @ movhi -.L1981: - ldr r3, .L2005 - ldr r2, .L2005+20 - ldrh r2, [r3, r2] - cmp r2, #2 - ldrls r2, .L2005+12 - movwls r3, #3916 - ldrlsh r6, [r2, r3] - bls .L2000 -.L1984: - mov r1, #0 - str r1, [r3, #-996] - mov r1, #432 - ldrh r0, [r3, r1] - cmp r0, #0 - addeq r0, r2, #1 -.L1942: - add sp, sp, #36 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2006: .align 2 -.L2005: +.L1982: + .word .LANCHOR0 .word .LANCHOR2 - .word -1140 - .word -1142 + .word -1992 + .word -3947 + .word -1996 + .word .LANCHOR2-1996 + .fnend + .size FtlWriteDumpData, .-FtlWriteDumpData + .align 2 + .global l2p_flush + .type l2p_flush, %function +l2p_flush: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r3, r4, r5, r6, r7, lr} + .save {r3, r4, r5, r6, r7, lr} + bl FtlWriteDumpData + mov r4, #0 + ldr r7, .L1988 + movw r6, #3954 + ldr r5, .L1988+4 + b .L1985 +.L1987: + ldr r3, [r5, #-1852] + mov r2, #12 + mla r3, r2, r4, r3 + ldr r3, [r3, #4] + cmp r3, #0 + bge .L1986 + mov r0, r4 + bl flush_l2p_region +.L1986: + add r4, r4, #1 + uxth r4, r4 +.L1985: + ldrh r3, [r7, r6] + cmp r3, r4 + bhi .L1987 + mov r0, #0 + ldmfd sp!, {r3, r4, r5, r6, r7, pc} +.L1989: + .align 2 +.L1988: .word .LANCHOR0 - .word -1760 - .word -2000 - .word -1194 - .word -1188 - .word .LC130 - .word -1196 - .word .LC131 - .word -1900 - .word -1776 - .word -1758 - .word -1948 - .word -1156 - .word -1896 - .word .LANCHOR2-1746 + .word .LANCHOR2 .fnend - .size ftl_do_gc.part.21, .-ftl_do_gc.part.21 + .size l2p_flush, .-l2p_flush .align 2 - .global ftl_do_gc - .type ftl_do_gc, %function -ftl_do_gc: + .global allocate_new_data_superblock + .type allocate_new_data_superblock, %function +allocate_new_data_superblock: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, lr} - .save {r3, r4, r5, lr} + ldr r3, .L2002 + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} mov r4, r0 - ldr r3, .L2014 - mov r5, r1 - ldr r0, [r3, #-2088] - cmp r0, #0 - movne r0, #0 - ldmnefd sp!, {r3, r4, r5, pc} - ldr r2, [r3, #-996] - cmp r2, #0 - ldmnefd sp!, {r3, r4, r5, pc} - ldr r1, .L2014+4 - ldrh r1, [r3, r1] - cmp r1, #47 - movls r0, r2 - ldmlsfd sp!, {r3, r4, r5, pc} - ldr r1, .L2014+8 - movw r2, #3000 - ldrh r1, [r1, r2] - movw r2, #65535 - cmp r1, r2 - beq .L2009 - ldr r1, .L2014+12 - ldrh r3, [r3, r1] - cmp r3, r2 - beq .L2009 - mov r0, #1 - bl FtlGcFreeTempBlock - cmp r0, #0 - bne .L2013 -.L2009: + ldr r3, [r3, #4040] + ldrh r5, [r0, #0] + cmp r3, #0 + bne .L1991 + movw r3, #65535 + cmp r5, r3 + beq .L1992 + ldr r3, .L2002+4 + mov r0, r5 + ldr r2, [r3, #-2016] + mov r3, r5, asl #1 + ldrh r3, [r2, r3] + cmp r3, #0 + beq .L1993 + bl INSERT_DATA_LIST + b .L1992 +.L1993: + bl INSERT_FREE_LIST +.L1992: + mov r3, #0 + strb r3, [r4, #8] + ldr r3, .L2002+8 + cmp r4, r3 + beq .L1994 + ldr r2, .L2002 + movw r3, #3868 + ldrh r3, [r2, r3] + cmp r3, #1 + beq .L1994 + ldrb r2, [r2, #928] @ zero_extendqisi2 + cmp r2, #0 + beq .L1995 +.L1994: + mov r3, #1 + strb r3, [r4, #8] + b .L1996 +.L1995: + ldr r2, .L2002+12 + cmp r4, r2 + bne .L1996 + cmp r3, #3 + ldr r3, .L2002+4 + beq .L1997 + ldr r2, [r3, #-1712] + cmp r2, #1 + bne .L1998 +.L1997: + mov r2, #1 + strb r2, [r3, #-1988] +.L1998: + ldr r2, .L2002 + ldr r2, [r2, #3840] + cmp r2, #0 + beq .L1996 + ldr r3, [r3, #-1780] + cmp r3, #29 + ldrls r3, .L2002+4 + movls r2, #1 + strlsb r2, [r3, #-1988] +.L1996: + ldr r3, .L2002+16 + ldr r6, .L2002+4 + ldrh r0, [r6, r3] + movw r3, #65535 + cmp r0, r3 + beq .L1999 + cmp r5, r0 + bne .L2000 + ldr r2, [r6, #-2016] + mov r3, r0, asl #1 + ldrh r3, [r2, r3] + cmp r3, #0 + beq .L2001 +.L2000: + bl update_vpc_list +.L2001: + ldr r3, .L2002+16 + mvn r2, #0 + strh r2, [r6, r3] @ movhi +.L1999: mov r0, r4 - mov r1, r5 - ldmfd sp!, {r3, r4, r5, lr} - b ftl_do_gc.part.21 -.L2013: - mov r0, #1 - ldmfd sp!, {r3, r4, r5, pc} -.L2015: + bl allocate_data_superblock + bl l2p_flush + mov r0, #0 + bl FtlEctTblFlush + bl FtlVpcTblFlush +.L1991: + mov r0, #0 + ldmfd sp!, {r4, r5, r6, pc} +.L2003: .align 2 -.L2014: +.L2002: + .word .LANCHOR0 .word .LANCHOR2 - .word -2008 - .word .LANCHOR1 - .word -1900 + .word .LANCHOR2-1948 + .word .LANCHOR2-1996 + .word -1020 .fnend - .size ftl_do_gc, .-ftl_do_gc + .size allocate_new_data_superblock, .-allocate_new_data_superblock .align 2 - .global FtlCacheWriteBack - .type FtlCacheWriteBack, %function -FtlCacheWriteBack: + .global FtlVpcCheckAndModify + .type FtlVpcCheckAndModify, %function +FtlVpcCheckAndModify: .fnstart @ args = 0, pretend = 0, frame = 8 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2038 - stmfd sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} - .save {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} - ldr r4, [r3, #440] - ldr r3, [r3, #-2088] - cmp r3, #0 - bne .L2017 - ldr r3, .L2038+4 - ldr r1, [r3, #3968] - cmp r1, #0 - beq .L2017 - ldrb r8, [r3, #928] @ zero_extendqisi2 - cmp r8, #0 - beq .L2018 - ldrb r8, [r4, #8] @ zero_extendqisi2 - sub lr, r8, #1 - rsbs r8, lr, #0 - adc r8, r8, lr -.L2018: - ldr r0, [r3, #3972] - mov r2, r8 - ldrb r3, [r4, #9] @ zero_extendqisi2 - mov r5, #0 - bl FlashProgPages - mov r7, r5 - ldr r6, .L2038+4 - ldr r9, .L2038 - b .L2019 -.L2024: - ldr r2, [r6, #3972] - add r3, r2, r5 - ldr r2, [r2, r5] - cmn r2, #1 - beq .L2037 - ldr r2, [r3, #4] - cmp r8, #0 - ldr r0, [r3, #16] - add r1, sp, #4 - str r2, [sp, #4] - orrne r2, r2, #-2147483648 - strne r2, [sp, #4] - mov r2, #1 - bl log2phys - ldr r3, [r6, #3972] - add r3, r3, r5 - ldr r3, [r3, #12] - ldr r0, [r3, #12] - cmn r0, #1 - beq .L2022 - ubfx r0, r0, #10, #16 - bl P2V_block_in_plane - ldr r2, [r9, #-2016] - mov r3, r0, asl #1 - mov sl, r0 - ldrh r2, [r2, r3] - cmp r2, #0 - bne .L2023 - ldr r0, .L2038+8 - mov r1, sl + stmfd sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + .save {r0, r1, r4, r5, r6, r7, r8, lr} + mov r4, #0 + ldr r6, .L2011 + ldr r1, .L2011+4 + ldr r0, .L2011+8 bl printk -.L2023: - mov r0, sl - bl decrement_vpc_count -.L2022: - add r7, r7, #1 - add r5, r5, #36 -.L2019: - ldr r3, [r6, #3968] - cmp r7, r3 - bcc .L2024 - b .L2025 -.L2033: - ldr r3, [r6, #3972] - mvn r2, #0 - movw sl, #3916 - str r2, [r3, r5] - b .L2026 -.L2029: - ldr r0, [r3, #4] - ubfx r0, r0, #10, #16 - bl P2V_block_in_plane - ldrh r3, [r4, #0] - cmp r3, r0 - bne .L2027 - ldr r2, [r7, #-2016] - mov r3, r3, asl #1 - ldrh r1, [r4, #4] - ldrh r0, [r2, r3] - rsb r1, r1, r0 - strh r1, [r2, r3] @ movhi - ldrh r3, [r6, sl] - strh r3, [r4, #2] @ movhi - mov r3, #0 - strb r3, [r4, #6] - strh r3, [r4, #4] @ movhi -.L2027: - ldrh r3, [r4, #4] - cmp r3, #0 - bne .L2028 - mov r0, r4 - bl allocate_new_data_superblock -.L2028: - ldr r3, [r7, #-1612] - add r3, r3, #1 - str r3, [r7, #-1612] - ldr r3, [r6, #3972] - add r3, r3, r5 - ldr r0, [r3, #4] - ubfx r0, r0, #10, #16 - bl FtlGcMarkBadPhyBlk + movw r3, #3858 + ldrh r2, [r6, r3] + mov r1, #0 + ldr r5, .L2011+12 + mov r2, r2, asl #1 + ldr r0, [r5, #-916] + bl ftl_memset + b .L2005 +.L2007: mov r0, r4 - bl get_new_active_ppa - mov r1, #1 - mov r2, r8 - mov r3, r0 - str r0, [sp, #4] - ldr r0, [r6, #3972] - add r0, r0, r5 - str r3, [r0, #4] - ldrb r3, [r4, #9] @ zero_extendqisi2 - bl FlashProgPages - ldr r3, [r7, #-2088] - cmp r3, #0 - bne .L2017 -.L2026: - ldr r2, [r6, #3972] - add r3, r2, r5 - ldr r2, [r2, r5] - cmn r2, #1 - beq .L2029 - ldr r2, [r3, #4] - cmp r8, #0 - ldr r0, [r3, #16] add r1, sp, #4 - str r2, [sp, #4] - orrne r2, r2, #-2147483648 - strne r2, [sp, #4] - mov r2, #1 + mov r2, #0 bl log2phys - ldr r3, [r6, #3972] - add r3, r3, r5 - ldr r3, [r3, #12] - ldr r0, [r3, #12] + ldr r0, [sp, #4] cmn r0, #1 - beq .L2031 + beq .L2006 ubfx r0, r0, #10, #16 bl P2V_block_in_plane - ldr r2, [r7, #-2016] - mov r3, r0, asl #1 - mov sl, r0 - ldrh r2, [r2, r3] - cmp r2, #0 - bne .L2032 - ldr r0, .L2038+8 - mov r1, sl + ldr r3, [r5, #-916] + mov r0, r0, asl #1 + ldrh r2, [r3, r0] + add r2, r2, #1 + strh r2, [r3, r0] @ movhi +.L2006: + add r4, r4, #1 +.L2005: + ldr r3, [r6, #3976] + cmp r4, r3 + bcc .L2007 + mov r4, #0 + ldr r7, .L2011 + ldr r5, .L2011+12 + movw r8, #65535 + b .L2008 +.L2010: + ldr r3, [r5, #-2016] + mov r6, r4, asl #1 + ldrh r2, [r3, r6] + ldr r3, [r5, #-916] + ldrh r3, [r3, r6] + cmp r2, r3 + beq .L2009 + cmp r2, r8 + beq .L2009 + ldr r0, .L2011+16 + mov r1, r4 bl printk -.L2032: - mov r0, sl - bl decrement_vpc_count -.L2031: - add r9, r9, #1 - add r5, r5, #36 - b .L2020 -.L2037: - ldr r6, .L2038+4 - mov r5, #0 - ldr r7, .L2038 - mov r9, r5 -.L2020: - ldr r3, [r6, #3968] - cmp r9, r3 - bcc .L2033 - movw r4, #16386 - ldr r6, .L2038 - ldr r5, .L2038+12 - b .L2034 -.L2035: - mov r0, #1 - mov r1, r0 - bl ftl_do_gc - subs r4, r4, #1 - beq .L2025 -.L2034: - ldrh r3, [r6, r5] - cmp r3, #0 - bne .L2035 -.L2025: - ldr r3, .L2038+4 - mov r2, #0 - str r2, [r3, #3968] -.L2017: - mov r0, #0 - ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, pc} -.L2039: + ldr r3, .L2011+20 + ldrh r3, [r5, r3] + cmp r3, r4 + beq .L2009 + ldr r3, .L2011+24 + ldrh r3, [r5, r3] + cmp r3, r4 + beq .L2009 + ldr r3, .L2011+28 + ldrh r3, [r5, r3] + cmp r3, r4 + beq .L2009 + ldr r3, [r5, #-916] + mov r0, r4 + ldrh r2, [r3, r6] + ldr r3, [r5, #-2016] + strh r2, [r3, r6] @ movhi + bl update_vpc_list + bl l2p_flush + bl FtlVpcTblFlush +.L2009: + add r4, r4, #1 + uxth r4, r4 +.L2008: + mov r3, #3856 + ldrh r3, [r7, r3] + cmp r3, r4 + bhi .L2010 + ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, pc} +.L2012: .align 2 -.L2038: - .word .LANCHOR2 +.L2011: .word .LANCHOR0 - .word .LC132 - .word -1138 + .word .LANCHOR3+48 + .word .LC101 + .word .LANCHOR2 + .word .LC147 + .word -1996 + .word -1900 + .word -1948 .fnend - .size FtlCacheWriteBack, .-FtlCacheWriteBack + .size FtlVpcCheckAndModify, .-FtlVpcCheckAndModify .align 2 .global FtlGcFreeTempBlock .type FtlGcFreeTempBlock, %function @@ -17769,54 +17742,54 @@ FtlGcFreeTempBlock: .fnstart @ args = 0, pretend = 0, frame = 8 @ frame_needed = 0, uses_anonymous_args = 0 + ldr r3, .L2036 stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, r8, sl, lr} .save {r0, r1, r2, r4, r5, r6, r7, r8, sl, lr} - movw r3, #3916 - ldr r2, .L2063 - ldrh r1, [r2, r3] - ldr r3, .L2063+4 - ldr r2, [r3, #-2088] + movw r2, #3916 + ldrh r1, [r3, r2] + ldr r2, [r3, #4040] cmp r2, #0 - bne .L2061 - ldr ip, .L2063+8 + bne .L2034 + ldr ip, .L2036+4 + ldr r3, .L2036+8 ldrh r4, [r3, ip] movw ip, #65535 cmp r4, ip - beq .L2042 + beq .L2015 cmp r0, #0 - beq .L2043 - ldr lr, .L2063+12 + beq .L2016 + ldr lr, .L2036+12 movw r0, #3000 ldrh r5, [lr, r0] cmp r5, ip movne r1, #2 - bne .L2043 + bne .L2016 strh r2, [lr, r0] @ movhi sub r2, r2, #2000 ldrh r3, [r3, r2] cmp r3, #17 movhi r1, #2 -.L2043: - ldr r0, .L2063+16 +.L2016: + ldr r0, .L2036+16 bl FtlGcScanTempBlk cmn r0, #1 str r0, [sp, #4] - beq .L2044 - ldr r3, .L2063+4 + beq .L2017 + ldr r3, .L2036 mov r4, r4, asl #1 - ldr r3, [r3, #-2080] + ldr r3, [r3, #4048] ldrh r2, [r3, r4] cmp r2, #4 - bls .L2045 + bls .L2018 sub r2, r2, #5 mov r0, #1 strh r2, [r3, r4] @ movhi bl FtlEctTblFlush -.L2045: - ldr r3, .L2063+4 +.L2018: + ldr r3, .L2036+8 ldr r2, [r3, #-1012] cmp r2, #0 - bne .L2046 + bne .L2019 ldr r2, [r3, #-1612] ldr r0, [sp, #4] add r2, r2, #1 @@ -17824,36 +17797,36 @@ FtlGcFreeTempBlock: ubfx r0, r0, #10, #16 bl FtlBbmMapBadBlock bl FtlBbmTblFlush -.L2046: - ldr r3, .L2063+4 +.L2019: + ldr r3, .L2036+8 mov r2, #0 str r2, [r3, #-1012] - b .L2059 -.L2044: - ldr r2, .L2063+12 + b .L2032 +.L2017: + ldr r2, .L2036+12 movw r3, #3000 ldrh r2, [r2, r3] movw r3, #65535 cmp r2, r3 - bne .L2059 -.L2042: - ldr r6, .L2063+4 + bne .L2032 +.L2015: + ldr r6, .L2036+8 movw r3, #65535 - ldr r5, .L2063+8 + ldr r5, .L2036+4 mov r4, #0 str r4, [r6, #-1012] ldrh r2, [r6, r5] cmp r2, r3 moveq r0, r4 - beq .L2041 + beq .L2014 bl FtlCacheWriteBack - ldr ip, .L2063 + ldr ip, .L2036 movw r0, #3916 ldrb r1, [r6, #-1893] @ zero_extendqisi2 ldrh r3, [r6, r5] ldrh r0, [ip, r0] ldr r2, [r6, #-2016] - ldr sl, .L2063+20 + ldr sl, .L2036+20 mov r3, r3, asl #1 mul r1, r0, r1 strh r1, [r2, r3] @ movhi @@ -17861,8 +17834,8 @@ FtlGcFreeTempBlock: ldrh r2, [r6, sl] add r3, r2, r3 str r3, [r6, #-1816] - b .L2047 -.L2050: + b .L2020 +.L2023: mov r7, #12 ldr r8, [r6, #-1148] mul r7, r7, r4 @@ -17874,7 +17847,7 @@ FtlGcFreeTempBlock: ldr r0, [sp, #4] ldr r3, [r8, r7] cmp r0, r3 - bne .L2048 + bne .L2021 ubfx r0, r0, #10, #16 bl P2V_block_in_plane add r1, r5, #4 @@ -17883,116 +17856,116 @@ FtlGcFreeTempBlock: ldr r0, [r5, #8] bl log2phys mov r0, r7 - b .L2062 -.L2048: + b .L2035 +.L2021: ldr r3, [r5, #4] cmp r0, r3 - beq .L2049 - ldr r3, .L2063+8 + beq .L2022 + ldr r3, .L2036+4 ldrh r0, [r6, r3] -.L2062: +.L2035: bl decrement_vpc_count -.L2049: +.L2022: add r4, r4, #1 uxth r4, r4 -.L2047: +.L2020: ldrh r3, [r6, sl] - ldr r5, .L2063+4 + ldr r5, .L2036+8 cmp r3, r4 - bhi .L2050 + bhi .L2023 movw r0, #65535 - ldr r4, .L2063+8 + ldr r4, .L2036+4 bl decrement_vpc_count - ldr r3, .L2063 + ldr r3, .L2036 ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L2051 - ldr r0, .L2063+24 + beq .L2024 + ldr r0, .L2036+24 ldrh r1, [r5, r4] bl printk -.L2051: +.L2024: ldrh r0, [r5, r4] ldr r2, [r5, #-2016] mov r3, r0, asl #1 ldrh r3, [r2, r3] cmp r3, #0 - beq .L2052 + beq .L2025 bl INSERT_DATA_LIST - b .L2053 -.L2052: + b .L2026 +.L2025: bl INSERT_FREE_LIST -.L2053: - ldr r4, .L2063+4 +.L2026: + ldr r4, .L2036+8 mvn r2, #0 - ldr r3, .L2063+8 + ldr r3, .L2036+4 strh r2, [r4, r3] @ movhi mov r3, #0 - ldr r2, .L2063+20 + ldr r2, .L2036+20 strh r3, [r4, r2] @ movhi sub r2, r2, #12 strh r3, [r4, r2] @ movhi bl l2p_flush bl FtlVpcTblFlush - ldr r3, .L2063 + ldr r3, .L2036 mov r1, r4 ldr r3, [r3, #3840] cmp r3, #0 - beq .L2054 + beq .L2027 ldr r3, [r4, #-1780] cmp r3, #29 - bhi .L2054 - ldr r3, .L2063+28 + bhi .L2027 + ldr r3, .L2036+28 mvn r1, #0 - ldr r2, .L2063+32 + ldr r2, .L2036+32 ldrh r3, [r4, r3] ldrh r2, [r4, r2] cmp r2, r3 movcc r3, r3, asl #1 - ldrcc r2, .L2063+36 + ldrcc r2, .L2036+36 strcch r3, [r4, r2] @ movhi - ldr r3, .L2063+40 - ldr r2, .L2063+4 + ldr r3, .L2036+40 + ldr r2, .L2036+8 strh r1, [r2, r3] @ movhi - b .L2061 -.L2054: - ldr r2, .L2063+28 - ldr r0, .L2063+32 - ldr r3, .L2063+4 + b .L2034 +.L2027: + ldr r2, .L2036+28 + ldr r0, .L2036+32 + ldr r3, .L2036+8 ldrh r2, [r1, r2] ldrh r1, [r1, r0] add r0, r2, r2, asl #1 cmp r1, r0, lsr #2 - ble .L2061 - ldr r1, .L2063+40 + ble .L2034 + ldr r1, .L2036+40 mvn r0, #0 strh r0, [r3, r1] @ movhi - ldr r1, .L2063 + ldr r1, .L2036 ldrb r0, [r1, #928] @ zero_extendqisi2 - ldr r1, .L2063+36 + ldr r1, .L2036+36 cmp r0, #0 subne r2, r2, #2 moveq r2, #20 strneh r2, [r3, r1] @ movhi streqh r2, [r3, r1] @ movhi - beq .L2041 - b .L2061 -.L2059: + beq .L2014 + b .L2034 +.L2032: mov r0, #1 - b .L2041 -.L2061: + b .L2014 +.L2034: mov r0, #0 -.L2041: +.L2014: ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, sl, pc} -.L2064: +.L2037: .align 2 -.L2063: +.L2036: .word .LANCHOR0 - .word .LANCHOR2 .word -1900 + .word .LANCHOR2 .word .LANCHOR1 .word .LANCHOR2-1900 .word -1144 - .word .LC133 + .word .LC148 .word -1776 .word -2000 .word -1196 @@ -18000,44 +17973,30 @@ FtlGcFreeTempBlock: .fnend .size FtlGcFreeTempBlock, .-FtlGcFreeTempBlock .align 2 - .global Ftl_gc_temp_data_write_back - .type Ftl_gc_temp_data_write_back, %function -Ftl_gc_temp_data_write_back: + .type Ftl_gc_temp_data_write_back.part.22, %function +Ftl_gc_temp_data_write_back.part.22: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, r4, r5, r6, r7, lr} .save {r3, r4, r5, r6, r7, lr} - ldr r3, .L2074 - ldrb r3, [r3, #928] @ zero_extendqisi2 - cmp r3, #0 - ldr r3, .L2074+4 - beq .L2066 - ldr r2, [r3, #-1180] - tst r2, #1 - beq .L2066 - ldr r2, .L2074+8 - ldrh r2, [r3, r2] - cmp r2, #0 - bne .L2071 -.L2066: mov r2, #0 - ldr r0, [r3, #-968] - ldr r1, [r3, #-1180] + ldr r4, .L2044 mov r3, r2 - bl FlashProgPages - mov r4, #0 - ldr r5, .L2074+4 + mov r5, #0 mov r6, #36 - b .L2068 -.L2070: - mul r3, r6, r4 - ldr r1, [r5, #-968] + ldr r0, [r4, #-968] + ldr r1, [r4, #-1180] + bl FlashProgPages + b .L2039 +.L2042: + mul r3, r6, r5 + ldr r1, [r4, #-968] add r2, r1, r3 ldr r1, [r1, r3] cmn r1, #1 - bne .L2069 - ldr r2, .L2074+12 + bne .L2040 + ldr r2, .L2044+4 mov lr, #0 ldr ip, [r7, #-2016] ldrh r0, [r7, r2] @@ -18054,23 +18013,24 @@ Ftl_gc_temp_data_write_back: bl FtlBbmMapBadBlock bl FtlBbmTblFlush bl FtlGcPageVarInit - b .L2073 -.L2069: + mov r0, #1 + ldmfd sp!, {r3, r4, r5, r6, r7, pc} +.L2040: ldr r3, [r2, #12] - add r4, r4, #1 + add r5, r5, #1 ldr r1, [r2, #4] - uxth r4, r4 + uxth r5, r5 ldr r0, [r3, #12] ldr r2, [r3, #8] bl FtlGcUpdatePage -.L2068: - ldr r1, [r5, #-1180] - ldr r7, .L2074+4 - cmp r4, r1 - bcc .L2070 +.L2039: + ldr r1, [r4, #-1180] + ldr r7, .L2044 + cmp r5, r1 + bcc .L2042 ldr r0, [r7, #-968] bl FtlGcBufFree - ldr r3, .L2074+8 + ldr r3, .L2044+8 mov r0, #0 str r0, [r7, #-1180] ldrh r3, [r7, r3] @@ -18078,19 +18038,50 @@ Ftl_gc_temp_data_write_back: ldmnefd sp!, {r3, r4, r5, r6, r7, pc} mov r0, #1 bl FtlGcFreeTempBlock -.L2073: mov r0, #1 ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L2071: +.L2045: + .align 2 +.L2044: + .word .LANCHOR2 + .word -1900 + .word -1896 + .fnend + .size Ftl_gc_temp_data_write_back.part.22, .-Ftl_gc_temp_data_write_back.part.22 + .align 2 + .global Ftl_gc_temp_data_write_back + .type Ftl_gc_temp_data_write_back, %function +Ftl_gc_temp_data_write_back: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + ldr r3, .L2051 + ldr r2, [r3, #4040] + cmp r2, #0 + bne .L2047 + ldrb r3, [r3, #928] @ zero_extendqisi2 + cmp r3, #0 + beq .L2048 + ldr r3, .L2051+4 + ldr r2, [r3, #-1180] + tst r2, #1 + beq .L2048 + ldr r2, .L2051+8 + ldrh r3, [r3, r2] + cmp r3, #0 + bne .L2047 +.L2048: + b Ftl_gc_temp_data_write_back.part.22 +.L2047: mov r0, #0 - ldmfd sp!, {r3, r4, r5, r6, r7, pc} -.L2075: + bx lr +.L2052: .align 2 -.L2074: +.L2051: .word .LANCHOR0 .word .LANCHOR2 .word -1896 - .word -1900 .fnend .size Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back .align 2 @@ -18103,12 +18094,12 @@ FtlGcPageRecovery: stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} movw r5, #3916 - ldr r6, .L2078 - ldr r0, .L2078+4 - ldr r4, .L2078+8 + ldr r6, .L2055 + ldr r0, .L2055+4 + ldr r4, .L2055+8 ldrh r1, [r6, r5] bl FtlGcScanTempBlk - ldr r3, .L2078+12 + ldr r3, .L2055+12 ldrh r2, [r4, r3] ldrh r3, [r6, r5] cmp r2, r3 @@ -18120,9 +18111,9 @@ FtlGcPageRecovery: mov r3, #0 str r3, [r4, #-1012] ldmfd sp!, {r4, r5, r6, pc} -.L2079: +.L2056: .align 2 -.L2078: +.L2055: .word .LANCHOR0 .word .LANCHOR2-1900 .word .LANCHOR2 @@ -18139,8 +18130,8 @@ FtlPowerLostRecovery: stmfd sp!, {r3, r4, r5, lr} .save {r3, r4, r5, lr} mov r4, #0 - ldr r3, .L2081 - ldr r5, .L2081+4 + ldr r3, .L2058 + ldr r5, .L2058+4 str r4, [r3, #300] mov r0, r5 bl FtlRecoverySuperblock @@ -18156,9 +18147,9 @@ FtlPowerLostRecovery: bl decrement_vpc_count mov r0, r4 ldmfd sp!, {r3, r4, r5, pc} -.L2082: +.L2059: .align 2 -.L2081: +.L2058: .word .LANCHOR2 .word .LANCHOR2-1996 .fnend @@ -18173,9 +18164,9 @@ FtlSysBlkInit: stmfd sp!, {r3, r4, r5, r6, r7, lr} .save {r3, r4, r5, r6, r7, lr} mov r3, #296 - ldr r6, .L2094 + ldr r6, .L2071 mov r2, #0 - ldr r4, .L2094+4 + ldr r4, .L2071+4 mvn r5, #0 ldr r0, [r6, #3852] strh r2, [r4, r3] @ movhi @@ -18183,2473 +18174,3344 @@ FtlSysBlkInit: strh r5, [r4, r3] @ movhi uxth r0, r0 bl FtlFreeSysBlkQueueInit - bl FtlScanSysBlk - ldr r3, .L2094+8 - ldrh r2, [r4, r3] - movw r3, #65535 - cmp r2, r3 - beq .L2084 - bl FtlLoadSysInfo - subs r7, r0, #0 - bne .L2084 - bl FtlLoadMapInfo - bl FtlLoadVonderInfo - bl Ftl_load_ext_data - bl FtlLoadEctTbl - bl FtlFreeSysBLkSort - bl SupperBlkListInit - bl FtlPowerLostRecovery - mov r0, #1 - bl FtlUpdateVaildLpn - movw r3, #3954 - ldrh r2, [r6, r3] - mov r3, r7 - ldr r1, [r4, #-1852] - b .L2085 -.L2087: - add r0, r1, r7 - add r7, r7, #12 - ldr r0, [r0, #4] + bl FtlScanSysBlk + ldr r3, .L2071+8 + ldrh r2, [r4, r3] + movw r3, #65535 + cmp r2, r3 + beq .L2061 + bl FtlLoadSysInfo + subs r7, r0, #0 + bne .L2061 + bl FtlLoadMapInfo + bl FtlLoadVonderInfo + bl Ftl_load_ext_data + bl FtlLoadEctTbl + bl FtlFreeSysBLkSort + bl SupperBlkListInit + bl FtlPowerLostRecovery + mov r0, #1 + bl FtlUpdateVaildLpn + movw r3, #3954 + ldrh r2, [r6, r3] + mov r3, r7 + ldr r1, [r4, #-1852] + b .L2062 +.L2064: + add r0, r1, r7 + add r7, r7, #12 + ldr r0, [r0, #4] + cmp r0, #0 + blt .L2063 + add r3, r3, #1 +.L2062: + cmp r3, r2 + blt .L2064 +.L2063: + ldr r4, .L2071+4 + cmp r3, r2 + ldr r1, .L2071+12 + ldrh r0, [r4, r1] + add r0, r0, #1 + strh r0, [r4, r1] @ movhi + blt .L2065 + mov r3, #296 + ldrh r3, [r4, r3] + cmp r3, #0 + beq .L2066 +.L2065: + ldr r0, .L2071+16 + bl FtlSuperblockPowerLostFix + ldr r0, .L2071+20 + bl FtlSuperblockPowerLostFix + ldr r3, .L2071+24 + ldr r1, [r4, #-2016] + ldr r2, .L2071+28 + ldrh r3, [r4, r3] + ldrh r0, [r4, r2] + mov r3, r3, asl #1 + ldrh ip, [r1, r3] + rsb r0, r0, ip + strh r0, [r1, r3] @ movhi + ldr r0, .L2071 + movw r1, #3916 + ldr r3, .L2071+32 + ldr lr, [r4, #-2016] + ldrh ip, [r0, r1] + strh ip, [r4, r3] @ movhi + mov r3, #0 + strh r3, [r4, r2] @ movhi + add r2, r2, #44 + strb r3, [r4, #-1990] + ldrh ip, [r4, r2] + add r2, r2, #4 + ldrh r5, [r4, r2] + mov ip, ip, asl #1 + ldrh r6, [lr, ip] + rsb r5, r5, r6 + strh r5, [lr, ip] @ movhi + ldrh r0, [r0, r1] + ldr r1, .L2071+36 + strh r3, [r4, r2] @ movhi + strb r3, [r4, #-1942] + strh r0, [r4, r1] @ movhi + ldr r0, .L2071+40 + bl FtlMapBlkWriteDumpData + ldr r0, .L2071+44 + bl FtlMapBlkWriteDumpData + ldr r3, .L2071+48 + ldrh r2, [r4, r3] + add r2, r2, #1 + strh r2, [r4, r3] @ movhi + bl l2p_flush + bl FtlVpcTblFlush + bl FtlVpcTblFlush +.L2066: + ldr r4, .L2071+4 + movw r3, #65535 + ldr r5, .L2071+24 + ldrh r2, [r4, r5] + cmp r2, r3 + beq .L2067 + ldr r3, .L2071+28 + ldrh r3, [r4, r3] + cmp r3, #0 + bne .L2067 + ldr r3, .L2071+52 + ldrh r3, [r4, r3] + cmp r3, #0 + bne .L2067 + bl FtlVpcTblFlush + ldrh r0, [r4, r5] + bl FtlGcRefreshOpenBlock + ldr r3, .L2071+56 + ldrh r0, [r4, r3] + bl FtlGcRefreshOpenBlock + ldr r0, .L2071+16 + bl allocate_new_data_superblock + ldr r0, .L2071+20 + bl allocate_new_data_superblock + add r0, r4, #248 + bl FtlMapBlkWriteDumpData +.L2067: + ldr r3, .L2071+12 + ldr r2, .L2071+4 + ldrh r5, [r2, r3] + ands r5, r5, #31 + movne r5, #0 + bne .L2061 + bl FtlVpcCheckAndModify +.L2061: + mov r0, r5 + ldmfd sp!, {r3, r4, r5, r6, r7, pc} +.L2072: + .align 2 +.L2071: + .word .LANCHOR0 + .word .LANCHOR2 + .word -1772 + .word -2044 + .word .LANCHOR2-1996 + .word .LANCHOR2-1948 + .word -1996 + .word -1992 + .word -1994 + .word -1946 + .word .LANCHOR2-1088 + .word .LANCHOR2+248 + .word -2042 + .word -1944 + .word -1948 + .fnend + .size FtlSysBlkInit, .-FtlSysBlkInit + .align 2 + .type FtlLowFormat.part.26, %function +FtlLowFormat.part.26: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + mov r6, #3952 + ldr r5, .L2094 + mov r1, #0 + ldr r4, .L2094+4 + ldrh r2, [r5, r6] + ldr r0, [r4, #-900] + mov r2, r2, asl #2 + bl ftl_memset + ldrh r2, [r5, r6] + mov r1, #0 + ldr r0, [r4, #-1032] + mov r2, r2, asl #2 + bl ftl_memset + ldr r0, [r5, #3852] + mov r3, #0 + str r3, [r4, #-1804] + str r3, [r4, #-1800] + uxth r0, r0 + bl FtlFreeSysBlkQueueInit + bl FtlLoadBbt cmp r0, #0 - blt .L2086 + beq .L2074 + bl FtlMakeBbt +.L2074: + mov r3, #0 + ldr ip, .L2094 + movw r0, #3922 + ldr r2, .L2094+4 + ldr r1, .L2094+8 + b .L2075 +.L2076: + ldr lr, [r2, #-944] + mvn r4, r3 + orr r4, r3, r4, asl #16 + str r4, [lr, r3, asl #2] + ldr lr, [r2, #-940] + str r1, [lr, r3, asl #2] add r3, r3, #1 + uxth r3, r3 +.L2075: + ldrh lr, [ip, r0] + ldr r8, .L2094 + cmp r3, lr, asl #7 + blt .L2076 + mov r3, #3856 + mov r5, #0 + ldrh r6, [r8, r3] + movw r7, #3858 + b .L2077 +.L2078: + mov r0, r6 + mov r1, #1 + bl FtlLowFormatEraseBlock + add r6, r6, #1 + uxth r6, r6 + add r5, r5, r0 + uxth r5, r5 +.L2077: + ldrh r3, [r8, r7] + ldr r4, .L2094 + cmp r3, r6 + bhi .L2078 + movw r3, #3848 + ldrh r1, [r4, r3] + sub r3, r5, #3 + cmp r3, r1, asl #1 + blt .L2079 + mov r0, r5 + movw r6, #3858 + bl __aeabi_uidiv + ldr r3, [r4, #3948] + add r0, r0, r3 + uxth r0, r0 + bl FtlSysBlkNumInit + ldr r0, [r4, #3852] + uxth r0, r0 + bl FtlFreeSysBlkQueueInit + mov r3, #3856 + ldrh r5, [r4, r3] + b .L2080 +.L2081: + mov r0, r5 + mov r1, #1 + bl FtlLowFormatEraseBlock + add r5, r5, #1 + uxth r5, r5 +.L2080: + ldrh r3, [r4, r6] + cmp r3, r5 + bhi .L2081 +.L2079: + mov r4, #0 + ldr r8, .L2094 + mov r6, r4 + mov r7, #3856 + b .L2082 +.L2083: + mov r0, r6 + mov r1, #0 + bl FtlLowFormatEraseBlock + add r6, r6, #1 + uxth r6, r6 + add r4, r4, r0 + uxth r4, r4 +.L2082: + ldrh r3, [r8, r7] + ldr r5, .L2094 + cmp r3, r6 + bhi .L2083 + movw r3, #3858 + ldr r8, .L2094+4 + ldrh r3, [r5, r3] + ldr fp, [r5, #3860] + ldr r9, .L2094+12 + str r3, [r8, #-984] + movw r3, #3848 + ldrh r6, [r5, r3] + mov r0, fp + mov r1, r6 + bl __aeabi_uidiv + ubfx sl, r0, #5, #16 + mov r7, r0 + add r3, sl, #36 + strh r3, [r8, r9] @ movhi + mov r3, #24 + str r0, [r5, #3976] + mul r3, r3, r6 + cmp r4, r3 + ble .L2084 + rsb r0, r4, fp + mov r1, r6 + bl __aeabi_uidiv + str r0, [r5, #3976] + mov r0, r0, lsr #5 + add r0, r0, #24 + strh r0, [r8, r9] @ movhi +.L2084: + ldr r3, .L2094 + ldr r3, [r3, #3840] + cmp r3, #1 + bne .L2085 + mov r0, r4 + mov r1, r6 + bl __aeabi_uidiv + ldr r8, .L2094+4 + ldr r5, .L2094+12 + ldrh r9, [r8, r5] + uxtah r0, r9, r0 + add r9, r9, r0, lsr #2 + strh r9, [r8, r5] @ movhi .L2085: - cmp r3, r2 - blt .L2087 + ldr r3, .L2094 + ldrb r3, [r3, #928] @ zero_extendqisi2 + cmp r3, #0 + beq .L2086 + mov r0, r4 + mov r1, r6 + bl __aeabi_uidiv + ldr r8, .L2094+4 + ldr r5, .L2094+12 + ldrh r9, [r8, r5] + uxtah r0, r9, r0 + add r9, r9, r0, lsr #2 + strh r9, [r8, r5] @ movhi .L2086: - ldr r4, .L2094+4 - cmp r3, r2 - ldr r1, .L2094+12 - ldrh r0, [r4, r1] - add r0, r0, #1 - strh r0, [r4, r1] @ movhi - blt .L2088 - mov r3, #296 - ldrh r3, [r4, r3] + ldr r0, .L2094 + movw r3, #3908 + ldrh r3, [r0, r3] cmp r3, #0 - beq .L2089 -.L2088: - ldr r0, .L2094+16 - bl FtlSuperblockPowerLostFix - ldr r0, .L2094+20 - bl FtlSuperblockPowerLostFix - ldr r3, .L2094+24 - ldr r1, [r4, #-2016] - ldr r2, .L2094+28 + beq .L2087 + ldr r1, .L2094+4 + ldr r2, .L2094+12 + ldrh ip, [r1, r2] + add ip, ip, r3, lsr #1 + strh ip, [r1, r2] @ movhi + mul ip, r6, r3 + cmp ip, r4 + strgt r7, [r0, #3976] + addgt r3, r3, #32 + addgt sl, sl, r3 + strgth sl, [r1, r2] @ movhi +.L2087: + ldr r4, .L2094+4 + ldr r5, .L2094 + ldr r3, .L2094+12 + ldr r7, .L2094+16 + ldr r2, [r5, #3976] ldrh r3, [r4, r3] - ldrh r0, [r4, r2] - mov r3, r3, asl #1 - ldrh ip, [r1, r3] - rsb r0, r0, ip - strh r0, [r1, r3] @ movhi - ldr r0, .L2094 - movw r1, #3916 - ldr r3, .L2094+32 - ldr lr, [r4, #-2016] - ldrh ip, [r0, r1] - strh ip, [r4, r3] @ movhi + rsb r3, r3, r2 + mul r6, r6, r3 + movw r3, #3916 + ldrh r3, [r5, r3] + str r6, [r4, #216] + mul r6, r3, r6 + movw r3, #3922 + ldrh r3, [r5, r3] + str r6, [r5, #3976] + mul r6, r3, r6 + str r6, [r5, #3956] + mvn r6, #0 + bl FtlBbmTblFlush + movw r3, #3858 + ldrh r2, [r5, r3] + mov r1, #0 + ldr r0, [r4, #-2016] + mov r2, r2, asl #1 + bl ftl_memset + ldr r1, .L2094+20 mov r3, #0 - strh r3, [r4, r2] @ movhi - add r2, r2, #44 + ldr r2, .L2094+24 + str r3, [r4, #-1844] + strh r3, [r4, r1] @ movhi + sub r1, r1, #236 + strb r3, [r4, #-1754] + strh r3, [r4, r1] @ movhi + mov r1, #255 + strb r3, [r4, #-1752] strb r3, [r4, #-1990] - ldrh ip, [r4, r2] - add r2, r2, #4 - ldrh r5, [r4, r2] - mov ip, ip, asl #1 - ldrh r6, [lr, ip] - rsb r5, r5, r6 - strh r5, [lr, ip] @ movhi - ldrh r0, [r0, r1] - ldr r1, .L2094+36 - strh r3, [r4, r2] @ movhi - strb r3, [r4, #-1942] - strh r0, [r4, r1] @ movhi + strh r3, [r4, r7] @ movhi + mov r3, #1 + strb r3, [r4, #-1988] + mov r3, #3856 + strh r6, [r4, r2] @ movhi + ldrh r2, [r5, r3] + ldr r0, [r4, #-1840] + mov r2, r2, lsr #3 + bl ftl_memset +.L2088: + ldr r0, .L2094+28 + bl make_superblock + ldrb r3, [r4, #-1989] @ zero_extendqisi2 + ldr r5, .L2094+4 + cmp r3, #0 + ldr r3, .L2094+16 + bne .L2089 + ldrh r3, [r4, r7] + ldr r2, [r4, #-2016] + mov r3, r3, asl #1 + strh r6, [r2, r3] @ movhi + ldrh r3, [r4, r7] + add r3, r3, #1 + strh r3, [r4, r7] @ movhi + b .L2088 +.L2089: + ldr r2, [r5, #-1804] + mvn r7, #0 + ldr r1, [r5, #-2016] + ldr r6, .L2094+32 + str r2, [r5, #-1984] + add r2, r2, #1 + str r2, [r5, #-1804] + ldr r2, .L2094+36 + ldrh r0, [r5, r2] + ldrh r2, [r5, r3] + mov r2, r2, asl #1 + strh r0, [r1, r2] @ movhi + mov r2, #0 ldr r0, .L2094+40 - bl FtlMapBlkWriteDumpData + ldrh r3, [r5, r3] + strb r2, [r5, #-1942] + add r3, r3, #1 + strh r2, [r5, r0] @ movhi + strh r3, [r5, r6] @ movhi + mov r3, #1 + strb r3, [r5, #-1940] +.L2090: ldr r0, .L2094+44 - bl FtlMapBlkWriteDumpData - ldr r3, .L2094+48 - ldrh r2, [r4, r3] - add r2, r2, #1 - strh r2, [r4, r3] @ movhi - bl l2p_flush - bl FtlVpcTblFlush - bl FtlVpcTblFlush -.L2089: + bl make_superblock + ldrb r3, [r5, #-1941] @ zero_extendqisi2 ldr r4, .L2094+4 - movw r3, #65535 - ldr r5, .L2094+24 - ldrh r2, [r4, r5] - cmp r2, r3 - beq .L2090 - ldr r3, .L2094+28 - ldrh r3, [r4, r3] cmp r3, #0 - bne .L2090 - ldr r3, .L2094+52 + bne .L2091 + ldrh r3, [r5, r6] + ldr r2, [r5, #-2016] + mov r3, r3, asl #1 + strh r7, [r2, r3] @ movhi + ldrh r3, [r5, r6] + add r3, r3, #1 + strh r3, [r5, r6] @ movhi + b .L2090 +.L2091: + ldr r3, [r4, #-1804] + mvn r5, #0 + ldr r2, [r4, #-2016] + str r3, [r4, #-1936] + add r3, r3, #1 + str r3, [r4, #-1804] + ldr r3, .L2094+48 + ldrh r1, [r4, r3] + sub r3, r3, #4 ldrh r3, [r4, r3] - cmp r3, #0 - bne .L2090 - bl FtlVpcTblFlush - ldrh r0, [r4, r5] - bl FtlGcRefreshOpenBlock + mov r3, r3, asl #1 + strh r1, [r2, r3] @ movhi + ldr r3, .L2094+52 + strh r5, [r4, r3] @ movhi + bl FtlFreeSysBlkQueueOut ldr r3, .L2094+56 - ldrh r0, [r4, r3] - bl FtlGcRefreshOpenBlock - ldr r0, .L2094+16 - bl allocate_new_data_superblock - ldr r0, .L2094+20 - bl allocate_new_data_superblock - add r0, r4, #248 - bl FtlMapBlkWriteDumpData -.L2090: - ldr r3, .L2094+12 - ldr r2, .L2094+4 - ldrh r5, [r2, r3] - ands r5, r5, #31 - movne r5, #0 - bne .L2084 - bl FtlVpcCheckAndModify -.L2084: - mov r0, r5 - ldmfd sp!, {r3, r4, r5, r6, r7, pc} + mov r2, #0 + strh r0, [r4, r3] @ movhi + add r3, r3, #2 + strh r2, [r4, r3] @ movhi + add r3, r3, #2 + ldr r2, [r4, #216] + strh r5, [r4, r3] @ movhi + add r3, r3, #2 + strh r2, [r4, r3] @ movhi + ldr r3, [r4, #-1804] + str r3, [r4, #-1764] + add r3, r3, #1 + str r3, [r4, #-1804] + bl FtlVpcTblFlush + bl FtlSysBlkInit + cmp r0, #0 + ldmnefd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + ldr r3, .L2094+60 + mov r2, #1 + str r2, [r3, #2996] + ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} .L2095: .align 2 .L2094: .word .LANCHOR0 .word .LANCHOR2 - .word -1772 - .word -2044 - .word .LANCHOR2-1996 - .word .LANCHOR2-1948 + .word 168778952 + .word -1776 .word -1996 + .word -1758 + .word -1760 + .word .LANCHOR2-1996 + .word -1948 .word -1992 - .word -1994 .word -1946 - .word .LANCHOR2-1088 - .word .LANCHOR2+248 - .word -2042 + .word .LANCHOR2-1948 .word -1944 - .word -1948 - .fnend - .size FtlSysBlkInit, .-FtlSysBlkInit - .align 2 - .global Ftl_get_new_temp_ppa - .type Ftl_get_new_temp_ppa, %function -Ftl_get_new_temp_ppa: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, lr} - .save {r3, r4, r5, lr} - ldr r3, .L2099 - ldr r5, .L2099+4 - ldrh r2, [r5, r3] - movw r3, #65535 - cmp r2, r3 - beq .L2097 - ldr r3, .L2099+8 - ldrh r3, [r5, r3] - cmp r3, #0 - bne .L2098 -.L2097: - bl FtlCacheWriteBack - mov r0, #0 - bl FtlGcFreeTempBlock - ldr r0, .L2099+12 - mov r4, #0 - strb r4, [r5, #-1892] - bl allocate_data_superblock - ldr r3, .L2099+16 - strh r4, [r5, r3] @ movhi - add r3, r3, #12 - strh r4, [r5, r3] @ movhi - bl l2p_flush - mov r0, r4 - bl FtlEctTblFlush - bl FtlVpcTblFlush -.L2098: - ldr r0, .L2099+12 - ldmfd sp!, {r3, r4, r5, lr} - b get_new_active_ppa -.L2100: - .align 2 -.L2099: .word -1900 - .word .LANCHOR2 - .word -1896 - .word .LANCHOR2-1900 - .word -1156 - .fnend - .size Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa - .align 2 - .global ftl_discard - .type ftl_discard, %function -ftl_discard: - .fnstart - @ args = 0, pretend = 0, frame = 8 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, lr} - .save {r0, r1, r2, r4, r5, r6, r7, lr} - add r2, r1, r0 - ldr r5, .L2111 - mov r7, r0 - mov r4, r1 - ldr r3, [r5, #3956] - cmp r2, r3 - mvnhi r0, #0 - bhi .L2102 - cmp r1, #31 - bls .L2109 - ldr r3, .L2111+4 - ldr r3, [r3, #-2088] - cmp r3, #0 - bne .L2109 - bl FtlCacheWriteBack - movw r3, #3922 - ldrh r6, [r5, r3] - mov r0, r7 - mov r1, r6 - bl __aeabi_uidiv - mls r7, r0, r6, r7 - mov r5, r0 - uxth r7, r7 - cmp r7, #0 - beq .L2103 - rsb r6, r7, r6 - add r5, r0, #1 - cmp r6, r4 - movcs r6, r4 - uxth r6, r6 - rsb r4, r6, r4 -.L2103: - mvn r3, #0 - ldr r7, .L2111 - str r3, [sp, #4] - movw r6, #3922 - b .L2104 -.L2106: - mov r0, r5 - mov r1, sp - mov r2, #0 - bl log2phys - ldr r3, [sp, #0] - cmn r3, #1 - beq .L2105 - ldr r3, .L2111+4 - add r1, sp, #4 - mov r0, r5 - ldr r2, [r3, #444] - add r2, r2, #1 - str r2, [r3, #444] - ldr r2, [r3, #-1832] - add r2, r2, #1 - str r2, [r3, #-1832] - mov r2, #1 - bl log2phys - ldr r0, [sp, #0] - ubfx r0, r0, #10, #16 - bl P2V_block_in_plane - bl decrement_vpc_count -.L2105: - ldrh r3, [r7, r6] - add r5, r5, #1 - rsb r4, r3, r4 -.L2104: - ldrh r3, [r7, r6] - cmp r4, r3 - bcs .L2106 - ldr r3, .L2111+4 - mov r4, #0 - ldr r2, [r3, #444] - cmp r2, #32 - bls .L2110 - str r4, [r3, #444] - bl l2p_flush - bl FtlVpcTblFlush - b .L2110 -.L2109: - mov r0, #0 - b .L2102 -.L2110: - mov r0, r4 -.L2102: - ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, pc} -.L2112: - .align 2 -.L2111: - .word .LANCHOR0 - .word .LANCHOR2 - .fnend - .size ftl_discard, .-ftl_discard - .align 2 - .global FtlDiscard - .type FtlDiscard, %function -FtlDiscard: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - b ftl_discard - .fnend - .size FtlDiscard, .-FtlDiscard - .align 2 - .global ftl_cache_flush - .type ftl_cache_flush, %function -ftl_cache_flush: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - b FtlCacheWriteBack - .fnend - .size ftl_cache_flush, .-ftl_cache_flush - .align 2 - .global rk_ftl_cache_write_back - .type rk_ftl_cache_write_back, %function -rk_ftl_cache_write_back: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - b FtlCacheWriteBack + .word -1772 + .word .LANCHOR1 .fnend - .size rk_ftl_cache_write_back, .-rk_ftl_cache_write_back + .size FtlLowFormat.part.26, .-FtlLowFormat.part.26 .align 2 - .global FtlSysFlush - .type FtlSysFlush, %function -FtlSysFlush: + .global FtlLowFormat + .type FtlLowFormat, %function +FtlLowFormat: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r3, lr} .save {r3, lr} - ldr r3, .L2118 - ldr r3, [r3, #-2088] + ldr r3, .L2098 + ldr r3, [r3, #4040] cmp r3, #0 - bne .L2117 - bl FtlCacheWriteBack - bl l2p_flush - mov r0, #1 - bl FtlEctTblFlush - bl FtlVpcTblFlush -.L2117: + bne .L2097 + bl FtlLowFormat.part.26 +.L2097: mov r0, #0 ldmfd sp!, {r3, pc} -.L2119: +.L2099: .align 2 -.L2118: - .word .LANCHOR2 +.L2098: + .word .LANCHOR0 .fnend - .size FtlSysFlush, .-FtlSysFlush + .size FtlLowFormat, .-FtlLowFormat .align 2 - .global FtlDeInit - .type FtlDeInit, %function -FtlDeInit: + .global Ftl_get_new_temp_ppa + .type Ftl_get_new_temp_ppa, %function +Ftl_get_new_temp_ppa: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, lr} - .save {r3, lr} - ldr r3, .L2122 - ldr r3, [r3, #2996] - cmp r3, #1 - bne .L2121 - bl FtlSysFlush -.L2121: + stmfd sp!, {r3, r4, r5, lr} + .save {r3, r4, r5, lr} + ldr r3, .L2103 + ldr r5, .L2103+4 + ldrh r2, [r5, r3] + movw r3, #65535 + cmp r2, r3 + beq .L2101 + ldr r3, .L2103+8 + ldrh r3, [r5, r3] + cmp r3, #0 + bne .L2102 +.L2101: + bl FtlCacheWriteBack mov r0, #0 - ldmfd sp!, {r3, pc} -.L2123: - .align 2 -.L2122: - .word .LANCHOR1 - .fnend - .size FtlDeInit, .-FtlDeInit + bl FtlGcFreeTempBlock + ldr r0, .L2103+12 + mov r4, #0 + strb r4, [r5, #-1892] + bl allocate_data_superblock + ldr r3, .L2103+16 + strh r4, [r5, r3] @ movhi + add r3, r3, #12 + strh r4, [r5, r3] @ movhi + bl l2p_flush + mov r0, r4 + bl FtlEctTblFlush + bl FtlVpcTblFlush +.L2102: + ldr r0, .L2103+12 + ldmfd sp!, {r3, r4, r5, lr} + b get_new_active_ppa +.L2104: .align 2 - .global ftl_deinit - .type ftl_deinit, %function -ftl_deinit: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, lr} - .save {r3, lr} - bl ftl_flash_de_init - bl FtlDeInit - ldmfd sp!, {r3, lr} - b ftl_flash_de_init +.L2103: + .word -1900 + .word .LANCHOR2 + .word -1896 + .word .LANCHOR2-1900 + .word -1156 .fnend - .size ftl_deinit, .-ftl_deinit + .size Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa .align 2 - .global rk_ftl_de_init - .type rk_ftl_de_init, %function -rk_ftl_de_init: + .type ftl_do_gc.part.23, %function +ftl_do_gc.part.23: .fnstart - @ args = 0, pretend = 0, frame = 0 + @ args = 0, pretend = 0, frame = 24 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, lr} - .save {r3, lr} + ldr r3, .L2202 + movw ip, #65535 + ldr r2, .L2202+4 + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .pad #36 + sub sp, sp, #36 + mov sl, r1 + str r0, [sp, #16] + ldrh r0, [r3, r2] + cmp r0, ip + beq .L2106 + ldr r1, .L2202+8 + ldrh r4, [r3, r1] + cmp r4, ip + streqh r0, [r3, r1] @ movhi + mvneq r1, #0 + streqh r1, [r3, r2] @ movhi +.L2106: + ldr r1, [sp, #16] + ldr r2, [r3, #-1192] + cmp r1, #1 + add r2, r2, #1 + add r2, r2, r1, asl #7 + str r2, [r3, #-1192] + bne .L2107 + ldr r3, .L2202+12 + ldr r1, [r3, #3840] + cmp r1, #0 + bne .L2108 + ldrb r3, [r3, #928] @ zero_extendqisi2 + cmp r3, #0 + beq .L2107 +.L2108: + ldr r4, .L2202 + ldr r3, [r4, #-1780] + cmp r3, #29 + bhi .L2107 + mov r3, #432 + ldrh r3, [r4, r3] + add r2, r2, r3 + str r2, [r4, #-1192] + bl FtlGcReFreshBadBlk + ldr r3, .L2202+16 + movw r2, #65535 + ldrh r3, [r4, r3] + cmp r3, r2 + bne .L2107 + ldr r2, .L2202+8 + ldrh r2, [r4, r2] + cmp r2, r3 + bne .L2107 + ldr r3, [r4, #-1192] + cmp r3, #1024 + bhi .L2109 + ldr r3, .L2202+20 + ldrh r3, [r4, r3] + cmp r3, #63 + bhi .L2107 +.L2109: + ldr r3, .L2202 + mov r2, #432 + ldr r0, .L2202+20 mov r1, #0 - ldr r0, .L2126 + strh r1, [r3, r2] @ movhi + ldrh ip, [r3, r0] + ldr r0, .L2202+24 + ldrh r0, [r3, r0] + add r0, r0, #64 + cmp ip, r0 + bgt .L2107 + str r1, [r3, #-1192] + ldr r1, [r3, #-1780] + cmp r1, #0 + moveq r1, #6 + beq .L2198 + cmp r1, #5 + bhi .L2111 + mov r1, #18 +.L2198: + strh r1, [r3, r2] @ movhi +.L2111: + mov r0, #32 + movw r7, #65535 + bl List_get_gc_head_node + uxth r2, r0 + cmp r2, r7 + beq .L2112 + ldr r5, .L2202 + ldr r6, .L2202+28 + ldrh r0, [r5, r6] + cmp r0, #0 + moveq r3, #1 + streqh r3, [r5, r6] @ movhi + beq .L2112 + ldr r3, .L2202+12 + movw ip, #3918 + movw lr, #3848 + ldr r9, [r5, #-2016] + mov r2, r2, asl #1 + ldrh ip, [r3, ip] + ldrh r3, [r3, lr] + ldrh r1, [r9, r2] + mul r3, r3, ip + add r3, r3, #1 + cmp r1, r3 + bgt .L2112 + add fp, r0, #1 + mov r8, #0 + str r8, [r5, #-1184] + uxth fp, fp + strh fp, [r5, r6] @ movhi + str r2, [sp, #8] + bl List_get_gc_head_node + ldr r2, [sp, #8] + uxth r4, r0 + cmp r4, r7 + beq .L2112 + ldrh r2, [r9, r2] + mov r7, r4, asl #1 + ldr r0, .L2202+32 + mov r1, fp + ldrh r3, [r9, r7] + str r2, [sp, #0] + mov r2, r4 bl printk - ldmfd sp!, {r3, lr} - b ftl_deinit -.L2127: - .align 2 + ldrh r3, [r5, r6] + cmp r3, #40 + bls .L2114 + ldr r3, [r5, #-2016] + ldrh r3, [r3, r7] + cmp r3, #32 + strhih r8, [r5, r6] @ movhi +.L2114: + ldr r2, .L2202 + mov r3, #432 + mov r1, #6 + strh r1, [r2, r3] @ movhi + b .L2116 +.L2112: + bl GetSwlReplaceBlock + movw r3, #65535 + cmp r0, r3 + mov r4, r0 + bne .L2116 + ldr r2, .L2202 + mov r3, #432 + mov r1, #0 + strh r1, [r2, r3] @ movhi +.L2107: + ldr r5, .L2202 + movw r4, #65535 + ldr r3, .L2202+16 + ldrh r2, [r5, r3] + cmp r2, r4 + bne .L2116 + sub r3, r3, #140 + ldrh r3, [r5, r3] + cmp r3, r2 + movne r4, r2 + bne .L2116 + ldr r2, .L2202+8 + ldrh r7, [r5, r2] + cmp r7, r3 + movne r4, r3 + bne .L2116 + ldr r8, .L2202+20 + ldr r2, [r5, #-1192] + ldrh r3, [r5, r8] + cmp r3, #23 + movhi r3, #1024 + movls r3, #5120 + cmp r2, r3 + movls r4, r7 + bls .L2116 + mov r2, #432 + mov r3, #0 + str r3, [r5, #-1192] + mov r6, r5 + strh r3, [r5, r2] @ movhi + bl GetSwlReplaceBlock + cmp r0, r7 + mov r4, r0 + bne .L2118 + ldr r3, .L2202+24 + ldrh r1, [r5, r8] + ldrh r2, [r5, r3] + cmp r1, r2 + movcs r2, #80 + strcsh r2, [r5, r3] @ movhi + bcs .L2128 + mov r0, #64 + bl List_get_gc_head_node + uxth r3, r0 + cmp r3, r4 + beq .L2128 + ldr r2, [r5, #-1000] + cmp r2, #0 + bne .L2121 + ldr r2, .L2202+12 + movw r1, #3868 + ldrh r1, [r2, r1] + cmp r1, #3 + beq .L2121 + ldr r1, [r5, #-1712] + cmp r1, #0 + bne .L2121 + ldr r1, [r2, #3840] + cmp r1, #0 + bne .L2121 + ldrb r0, [r2, #928] @ zero_extendqisi2 + cmp r0, #0 + beq .L2122 +.L2121: + ldr r1, .L2202 + mov r3, r3, asl #1 + movw ip, #3848 + movw lr, #3868 + ldr r2, [r1, #-2016] + ldrh r0, [r2, r3] + movw r2, #3918 + ldr r3, .L2202+12 + ldrh r2, [r3, r2] + ldrh ip, [r3, ip] + ldrh r3, [r3, lr] + mul ip, ip, r2 + cmp r3, #3 + moveq r3, r2, lsr #1 + movne r3, #0 + add r3, ip, r3 + cmp r0, r3 + bgt .L2124 + mov r0, #0 + bl List_get_gc_head_node + ldr r2, .L2202+12 + ldr r3, .L2202 + ldr r2, [r2, #3976] + ldr r1, [r3, #-1844] + add r2, r2, r2, asl #1 + cmp r1, r2, lsr #2 + ldr r2, .L2202+24 + movhi r1, #128 + movls r1, #160 + strh r1, [r3, r2] @ movhi + uxth r4, r0 + b .L2126 +.L2124: + ldr r3, .L2202+24 + mov r2, #128 + strh r2, [r1, r3] @ movhi + b .L2128 +.L2122: + ldr r2, [r5, #-2016] + mov r3, r3, asl #1 + ldr r6, .L2202 + ldr r5, .L2202+24 + ldrh r3, [r2, r3] + cmp r3, #7 + movhi r3, #64 + strhih r3, [r6, r5] @ movhi + bhi .L2128 + bl List_get_gc_head_node + mov r3, #128 + strh r3, [r6, r5] @ movhi + uxth r4, r0 .L2126: - .word .LC134 - .fnend - .size rk_ftl_de_init, .-rk_ftl_de_init - .align 2 - .global rk_ftl_garbage_collect - .type rk_ftl_garbage_collect, %function -rk_ftl_garbage_collect: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - b ftl_do_gc - .fnend - .size rk_ftl_garbage_collect, .-rk_ftl_garbage_collect - .align 2 - .global ftl_fix_nand_power_lost_error - .type ftl_fix_nand_power_lost_error, %function -ftl_fix_nand_power_lost_error: - .fnstart - @ args = 0, pretend = 0, frame = 48 - @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2138 - stmfd sp!, {r4, r5, r6, r7, r8, sl, lr} - .save {r4, r5, r6, r7, r8, sl, lr} - .pad #52 - sub sp, sp, #52 - ldrb r3, [r3, #928] @ zero_extendqisi2 - cmp r3, #0 - beq .L2129 - ldr r4, .L2138+4 - movw r3, #294 - ldr r0, .L2138+8 - movw r7, #4097 - ldrh r6, [r4, r3] - ldr r3, [r4, #-2016] - mov r5, r6, asl #1 - mov r1, r6 - ldrh r2, [r3, r5] + movw r3, #65535 + cmp r4, r3 + beq .L2128 +.L2118: + ldr r1, .L2202 + mov r0, r4, asl #1 + ldr r3, .L2202+20 + ldr ip, .L2202+12 + ldrh r2, [r1, r3] + ldr ip, [ip, #4048] + ldr r3, [r1, #-2016] + ldrh r3, [r3, r0] + ldrh r0, [ip, r0] + str r0, [sp, #0] + ldr r0, .L2202+36 + ldrh r1, [r1, r0] + ldr r0, .L2202+40 + str r1, [sp, #4] + mov r1, r4 bl printk - ldr r3, .L2138+12 - ldrh r0, [r4, r3] - bl FtlGcRefreshOpenBlock - ldr r3, .L2138+16 - ldrh r0, [r4, r3] - bl FtlGcRefreshOpenBlock - ldr r0, .L2138+20 - bl allocate_new_data_superblock - ldr r0, .L2138+24 - bl allocate_new_data_superblock - b .L2131 -.L2133: - mov r0, #1 - mov r1, r0 - bl ftl_do_gc - ldr r3, [r4, #-2016] - ldrh r3, [r3, r5] +.L2128: + bl FtlGcReFreshBadBlk +.L2116: + movw r0, #65535 + rsb ip, r0, r4 + rsbs r1, ip, #0 + ldr r3, [sp, #16] + adc r1, r1, ip + ldr r5, .L2202 cmp r3, #0 - beq .L2132 -.L2131: - subs r7, r7, #1 - bne .L2133 -.L2132: - ldr r7, .L2138+4 - mov r1, r6 - ldr r0, .L2138+8 - ldr r3, [r7, #-2016] - ldrh r2, [r3, r5] - bl printk - ldr r3, [r7, #-2016] - ldrh r4, [r3, r5] - cmp r4, #0 - bne .L2134 - add r8, sp, #48 - mov r0, sp - strh r6, [r8, #-48]! @ movhi - add r8, r8, #14 - bl make_superblock - ldr r2, .L2138 - movw r3, #3848 - ldr r7, [r7, #-2084] - movw lr, #65535 - mov ip, #36 - ldrh sl, [r2, r3] - mov r1, r4 - mov r3, r4 - b .L2135 -.L2137: - ldrh r0, [r8, #2]! - cmp r0, lr - beq .L2136 - mla r2, ip, r4, r7 - add r4, r4, #1 - mov r0, r0, asl #10 - uxth r4, r4 - stmib r2, {r0, r1} - str r1, [r2, #12] + movne r2, #0 + andeq r2, r1, #1 + cmp r2, #0 + beq .L2129 + ldr r3, .L2202+20 + ldrh r2, [r5, r3] + cmp r2, #24 + movhi r6, #1 + bhi .L2130 + ldr r1, .L2202+12 + movw r3, #3916 + cmp r2, #16 + ldrh r6, [r1, r3] + movhi r6, r6, lsr #5 + bhi .L2130 + cmp r2, #12 + movhi r6, r6, lsr #4 + bhi .L2130 + cmp r2, #8 + movhi r6, r6, lsr #2 +.L2130: + ldr r1, .L2202+36 + ldr r3, .L2202 + ldrh r0, [r5, r1] + cmp r0, r2 + mov r0, r1 + bcs .L2134 + ldr r2, .L2202+44 + movw ip, #65535 + ldrh r2, [r3, r2] + cmp r2, ip + bne .L2135 + ldr ip, .L2202+8 + ldrh ip, [r3, ip] + cmp ip, r2 + bne .L2135 + mov r2, #432 + ldrh r0, [r3, r2] + cmp r0, #0 + bne .L2136 + ldr r2, .L2202+12 + ldr ip, [r3, #-1844] + ldr r2, [r2, #3976] + add r2, r2, r2, asl #1 + cmp ip, r2, lsr #2 + movcs r2, #18 + bcs .L2200 .L2136: - add r3, r3, #1 - uxth r3, r3 + ldr r3, .L2202 + ldr r2, .L2202+48 + ldr r1, .L2202+36 + ldrh r2, [r3, r2] + add r2, r2, r2, asl #1 + mov r2, r2, asr #2 +.L2200: + strh r2, [r3, r1] @ movhi + mov r2, #0 + ldr r3, .L2202 + str r2, [r3, #-1184] + b .L2139 .L2135: - cmp r3, sl - bne .L2137 - ldr r7, .L2138+4 - mov r1, r6 - ldr r0, .L2138+28 - ldr r3, [r7, #-2016] - ldrh r2, [r3, r5] - bl printk - mov r1, #0 - mov r2, r4 - ldr r0, [r7, #-2084] - bl FlashEraseBlocks - ldr r0, [r7, #-2084] - mov r1, #1 - mov r2, r4 - bl FlashEraseBlocks + ldr r3, .L2202 + ldr r2, .L2202+48 + ldrh r2, [r3, r2] + add r2, r2, r2, asl #1 + mov r2, r2, asr #2 + strh r2, [r3, r0] @ movhi .L2134: - ldr r2, .L2138+4 - movw r3, #294 - mvn r1, #0 - strh r1, [r2, r3] @ movhi + ldr r3, .L2202+12 + cmp sl, #2 + movw r4, #65535 + movhi sl, #0 + movls sl, #1 + ldr r3, [r3, #3840] + cmp r3, #0 + moveq sl, #0 + cmp sl, #0 + addne r6, r6, #1 + uxthne r6, r6 + b .L2140 .L2129: - add sp, sp, #52 - ldmfd sp!, {r4, r5, r6, r7, r8, sl, pc} -.L2139: - .align 2 -.L2138: - .word .LANCHOR0 - .word .LANCHOR2 - .word .LC135 - .word -1996 - .word -1948 - .word .LANCHOR2-1996 - .word .LANCHOR2-1948 - .word .LC136 - .fnend - .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error - .align 2 - .global FtlInit - .type FtlInit, %function -FtlInit: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 + ldr r3, .L2202+44 + ldrh r3, [r5, r3] + cmp r3, r0 + bne .L2141 + ldr r0, .L2202+8 + ldrh r0, [r5, r0] + cmp r0, r3 + movne r1, #0 + andeq r1, r1, #1 + cmp r1, #0 + beq .L2141 + ldr r1, .L2202+16 + ldrh r4, [r5, r1] + cmp r4, r3 + movne r4, r3 + bne .L2141 + ldr r3, .L2202+20 + mov r6, #432 + str r2, [r5, #-1184] + ldrh r7, [r5, r3] + add r3, r3, #804 + ldrh r2, [r5, r3] + cmp r2, r7 + bcs .L2142 + ldrh r2, [r5, r6] + cmp r2, #0 + bne .L2143 + ldr r2, .L2202+12 + ldr r1, [r5, #-1844] + ldr r2, [r2, #3976] + add r2, r2, r2, asl #1 + cmp r1, r2, lsr #2 + movcs r2, #18 + strcsh r2, [r5, r3] @ movhi + bcs .L2145 +.L2143: + ldr r3, .L2202 + ldr r2, .L2202+48 + ldr r1, .L2202+36 + ldrh r2, [r3, r2] + add r2, r2, r2, asl #1 + mov r2, r2, asr #2 + strh r2, [r3, r1] @ movhi +.L2145: + bl FtlReadRefresh + mov r3, #432 + ldr r2, .L2202 + b .L2201 +.L2142: + ldrh r0, [r5, r6] + cmp r0, #0 + bne .L2141 + ldr r2, .L2202+48 + ldrh r4, [r5, r2] + add r2, r4, r4, asl #1 + mov r2, r2, asr #2 + strh r2, [r5, r3] @ movhi + bl List_get_gc_head_node + ldr r3, [r5, #-2016] + ldr r1, .L2202+12 + movw r2, #3918 + ldrh r2, [r1, r2] + uxth r0, r0 + mov r0, r0, asl #1 + ldrh r3, [r3, r0] + movw r0, #3848 + ldrh r1, [r1, r0] + mul r2, r1, r2 + add r2, r2, r2, lsr #31 + cmp r3, r2, asr #1 + ble .L2146 + sub r4, r4, #1 + cmp r7, r4 + blt .L2146 + bl FtlReadRefresh + ldrh r0, [r5, r6] + b .L2139 +.L2146: + cmp r3, #0 + movwne r4, #65535 + bne .L2141 + movw r0, #65535 + bl decrement_vpc_count + ldr r3, .L2202+20 + ldr r2, .L2202 + ldrh r0, [r2, r3] + add r0, r0, #1 + b .L2139 .L2141: - stmfd sp!, {r4, r5, r6, lr} - .save {r4, r5, r6, lr} - mvn r3, #0 - ldr r4, .L2151 - ldr r6, .L2151+4 - ldr r5, .L2151+8 - ldr r1, .L2151+12 - str r3, [r6, #2996] + ldr r3, .L2202+12 + ldr r6, [r3, #3840] + cmp r6, #0 + movne r6, #2 + moveq r6, #1 +.L2140: + ldr r3, .L2202 + movw r0, #65535 + ldr r2, .L2202+16 + ldrh r1, [r3, r2] + cmp r1, r0 + bne .L2147 + cmp r4, r1 + strneh r4, [r3, r2] @ movhi + bne .L2149 + ldr r2, .L2202+8 + ldrh r1, [r3, r2] + cmp r1, r4 + beq .L2149 + ldr r0, [r3, #-2016] + mov r1, r1, asl #1 + ldrh r1, [r0, r1] + cmp r1, #0 + mvneq r1, #0 + streqh r1, [r3, r2] @ movhi + ldr r3, .L2202 + ldr r1, .L2202+16 + ldrh r0, [r3, r2] + strh r0, [r3, r1] @ movhi + mvn r1, #0 + strh r1, [r3, r2] @ movhi +.L2149: + ldr r5, .L2202 mov r3, #0 - ldr r0, .L2151+16 - str r3, [r4, #448] - str r3, [r4, #-2088] - bl printk - ldr r0, .L2151+20 - bl FtlConstantsInit - bl FtlMemInit - bl FtlVariablesInit - ldr r0, [r5, #3852] - uxth r0, r0 - bl FtlFreeSysBlkQueueInit - bl FtlLoadBbt - cmp r0, #0 - ldrne r0, .L2151+24 - bne .L2150 - bl FtlSysBlkInit + ldr r7, .L2202+16 + strb r3, [r5, #-1752] + movw r3, #65535 + ldrh r0, [r5, r7] + cmp r0, r3 + beq .L2147 + bl IsBlkInGcList cmp r0, #0 - beq .L2144 - ldr r0, .L2151+28 -.L2150: - ldr r1, .L2151+32 - bl printk - b .L2143 -.L2144: - mov r1, #1 - str r1, [r6, #2996] - bl ftl_do_gc - ldr r3, .L2151+36 - ldrh r3, [r4, r3] - cmp r3, #15 - bhi .L2145 - mov r4, #1024 -.L2146: - mov r0, #1 - mov r1, r0 - bl ftl_do_gc - subs r4, r4, #1 - bne .L2146 - b .L2143 -.L2145: - ldrb r3, [r5, #928] @ zero_extendqisi2 + mvnne r3, #0 + strneh r3, [r5, r7] @ movhi + ldr r3, .L2202+12 + ldr r7, .L2202 + ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L2143 - mov r4, #128 -.L2147: - mov r0, #1 - mov r1, r0 - bl ftl_do_gc - subs r4, r4, #1 - bne .L2147 -.L2143: - mov r0, #0 - ldmfd sp!, {r4, r5, r6, pc} + beq .L2152 + ldr r3, .L2202+16 + ldrh r0, [r7, r3] + bl ftl_get_blk_mode + strb r0, [r7, #-1752] .L2152: - .align 2 -.L2151: - .word .LANCHOR2 - .word .LANCHOR1 - .word .LANCHOR0 - .word .LC79 - .word .LC78 - .word .LANCHOR0+3048 - .word .LC137 - .word .LC138 - .word .LANCHOR3+36 - .word -2000 - .fnend - .size FtlInit, .-FtlInit - .align 2 - .type ftl_write.part.22, %function -ftl_write.part.22: - .fnstart - @ args = 0, pretend = 0, frame = 96 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} - mov r3, #2048 - ldr r4, .L2198 - .pad #100 - sub sp, sp, #100 - ldr r8, .L2198+4 - mov r5, r1 - mov r7, r0 - mov r9, r2 - str r3, [r4, #452] - movw r3, #3922 - ldrh r6, [r8, r3] - mov r1, r6 - bl __aeabi_uidiv - mov r1, r6 - str r0, [sp, #16] - sub r0, r7, #1 - add r0, r0, r5 - bl __aeabi_uidiv - ldr r3, [sp, #16] - ldr sl, [r8, #3968] - cmp sl, #0 - rsb fp, r3, r0 - str r0, [sp, #36] - add r3, fp, #1 - str r3, [sp, #20] - ldr lr, [sp, #20] - ldr r3, [r4, #-1828] - add r3, lr, r3 - str r3, [r4, #-1828] - ldr r3, [r4, #-1812] - add r3, r5, r3 - str r3, [r4, #-1812] - beq .L2186 - ldr r3, [r8, #3972] - sub sl, sl, #1 - mov r2, #36 - ldr r0, [sp, #16] - mla sl, r2, sl, r3 - ldr r3, [sl, #16] - cmp r0, r3 - strne r5, [sp, #32] - bne .L2155 - ldr r3, [r4, #-1824] - mov r0, r7 - mov r1, r6 - add r3, r3, #1 - str r3, [r4, #-1824] - ldr r3, [r4, #456] - add r3, r3, #1 - str r3, [r4, #456] - bl __aeabi_uidivmod - ldr r0, [sl, #8] - rsb r8, r1, r6 - add r0, r0, r1, asl #9 - cmp r8, r5 - movcs r8, r5 - mov r1, r9 - mov r3, r8, asl #9 - str r3, [sp, #4] + ldr r8, .L2202+16 + movw r3, #65535 + ldr r5, .L2202 + ldrh r2, [r7, r8] + cmp r2, r3 + beq .L2147 + add r0, r5, r8 + bl make_superblock + ldr r1, .L2202+52 + movw r2, #434 + mov r3, #0 + strh r3, [r5, r2] @ movhi + strh r3, [r5, r1] @ movhi + strb r3, [r5, #-1754] + ldrh r3, [r5, r8] + ldr r2, [r5, #-2016] + mov r3, r3, asl #1 + ldrh r2, [r2, r3] + mov r3, #436 + strh r2, [r5, r3] @ movhi +.L2147: + ldr r3, .L2202 + ldr r2, .L2202+16 + ldrh r1, [r3, r2] + sub r2, r2, #236 + ldrh r2, [r3, r2] + cmp r2, r1 mov r2, r3 - bl memcpy - cmp fp, #0 - ldr r3, [sp, #4] - bne .L2156 - ldr r2, [r4, #456] - cmp r2, #2 - ble .L2157 -.L2156: - add r9, r9, r3 - add r7, r7, r8 - ldr r3, [sp, #16] - rsb r1, r8, r5 - str fp, [sp, #20] - add r3, r3, #1 - str r1, [sp, #32] - str r3, [sp, #16] -.L2155: - ldr r3, .L2198 - mov r2, #0 - str r2, [r3, #456] - b .L2154 -.L2186: - str r5, [sp, #32] + beq .L2153 + ldr r0, .L2202+56 + ldrh r3, [r3, r0] + cmp r3, r1 + movne fp, r4 + bne .L2197 .L2154: - ldr r0, [sp, #16] - ldr r1, [sp, #36] - bl FtlCacheMetchLpa - cmp r0, #0 - beq .L2158 - bl FtlCacheWriteBack +.L2153: + ldr r3, .L2202+16 + mvn r1, #0 + strh r1, [r2, r3] @ movhi + mov r3, #432 +.L2201: + ldrh r0, [r2, r3] + b .L2139 +.L2197: + ldr r4, .L2202 + movw sl, #65535 + ldr r3, .L2202+16 + ldrh r3, [r4, r3] + cmp r3, sl + bne .L2156 + ldr r5, .L2202+28 + mov r3, #0 + str r3, [r4, #-1184] +.L2196: + ldrh r8, [r4, r5] + mov r0, r8 + bl List_get_gc_head_node + ldr r3, .L2202+16 + movw r1, #65535 + uxth r7, r0 + strh r7, [r4, r3] @ movhi + cmp r7, r1 + bne .L2158 + ldr r2, .L2202 + add r3, r3, #572 + mov r1, #0 + mov r0, #8 + strh r1, [r2, r3] @ movhi + b .L2139 .L2158: - cmp r5, r6, asl #1 - ldr r3, .L2198 - ldr r4, .L2198+4 - mov fp, #0 - movcc r6, #0 - movcs r6, #1 - str r6, [sp, #24] - ldr r6, .L2198+8 - ldr r5, [sp, #16] - mov sl, r4 - str fp, [sp, #40] - str r6, [r3, #440] - b .L2195 -.L2184: - ldrh r1, [r6, #4] - cmp r1, #0 - bne .L2160 - ldr r2, .L2198+8 - ldr r3, .L2198+12 - cmp r6, r2 - bne .L2161 - ldr r2, .L2198+16 - ldrh r8, [r8, r2] - cmp r8, #0 - bne .L2162 - ldr r0, .L2198+20 - str r3, [sp, #4] - bl allocate_new_data_superblock - ldr r3, [sp, #4] - str r8, [r3, #3004] -.L2162: - ldr r0, .L2198+8 - str r3, [sp, #4] - bl allocate_new_data_superblock - ldr r3, [sp, #4] - ldr r2, [r3, #3004] - ldr r3, .L2198+20 - cmp r2, #0 - movne r6, r3 - b .L2163 + mov r0, r7 + bl IsBlkInGcList + cmp r0, #0 + add r0, r8, #1 + strneh r0, [r4, r5] @ movhi + bne .L2196 + ldr ip, .L2202+12 + movw r8, #3916 + movw sl, #3848 + ldr r2, [r4, #-2016] + mov r3, r7, asl #1 + uxth r0, r0 + ldrh r8, [ip, r8] + ldrh ip, [ip, sl] + strh r0, [r4, r5] @ movhi + ldrh r1, [r2, r3] + mul r8, ip, r8 + add ip, r8, r8, lsr #31 + cmp r1, ip, asr #1 + bgt .L2161 + cmp r0, #48 + bls .L2162 + cmp r1, #8 + bls .L2162 + ldr r1, .L2202+60 + ldrh r1, [r4, r1] + cmp r1, #35 + bhi .L2162 .L2161: - str r1, [r3, #3004] - ldr r3, .L2198+24 - ldrh r3, [r8, r3] - cmp r3, #0 - movne r6, r2 + mov r1, #0 + strh r1, [r4, r5] @ movhi +.L2162: + ldrh r3, [r2, r3] + movw r2, #65535 + ldr sl, .L2202 + cmp r3, r8 + cmpge fp, r2 + movne r8, #0 + moveq r8, #1 bne .L2163 - mov r0, r6 - bl allocate_new_data_superblock + ldr r3, .L2202+16 + mvn r2, #0 + strh r2, [sl, r3] @ movhi + add r3, r3, #572 + mov r2, #0 + strh r2, [sl, r3] @ movhi + mov r3, #432 + ldrh r0, [sl, r3] + b .L2139 .L2163: - ldrh r3, [r6, #4] cmp r3, #0 bne .L2164 - mov r0, r6 - bl allocate_new_data_superblock + movw r0, #65535 + bl decrement_vpc_count + ldrh r3, [r4, r5] + add r3, r3, #1 + strh r3, [r4, r5] @ movhi + b .L2196 .L2164: - ldr r3, .L2198 - str r6, [r3, #440] -.L2160: - ldr r2, .L2198 - mov r8, r6 - ldrh r3, [r6, #4] - ldr r1, [r2, #-976] - ldr r2, [r4, #3968] - rsb r2, r2, r1 - cmp r3, r2 - movcc r2, r3 - ldr r3, [sp, #20] - cmp r2, r3 - movcc r3, r2 - str r3, [sp, #52] - mov r3, #0 - str r3, [sp, #28] - b .L2165 -.L2181: - ldrh r3, [r8, #4] + ldr r3, .L2202+12 + strb r8, [sl, #-1752] + ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - beq .L2166 - ldr r6, [sp, #36] - rsb r2, r6, r5 - ldr r6, [sp, #24] - rsbs r3, r2, #0 - adc r3, r3, r2 - tst r3, r6 - beq .L2167 - ldr r6, [sp, #28] - cmp r6, #0 - beq .L2167 - movw lr, #3922 - ldr r6, [sp, #32] - ldrh r2, [r4, lr] - add r1, r6, r7 - mls r1, r2, r5, r1 - cmp r1, r2 + beq .L2165 + mov r0, r7 + bl ftl_get_blk_mode + strb r0, [sl, #-1752] +.L2165: + ldr r4, .L2202 + sub r0, r4, #1760 + bl make_superblock + movw r1, #434 + mov r3, #0 + strh r3, [r4, r1] @ movhi + ldr r1, .L2202+16 + ldr r0, [r4, #-2016] + ldrh r1, [r4, r1] + mov r1, r1, asl #1 + ldrh r0, [r0, r1] + mov r1, #436 + strb r3, [r4, #-1754] + strh r0, [r4, r1] @ movhi + ldr r1, .L2202+52 + strh r3, [r4, r1] @ movhi +.L2156: + ldr sl, [sp, #16] + cmp sl, #1 bne .L2166 + bl FtlReadRefresh +.L2166: + ldr r3, .L2202 + mov r2, #1 + movw r1, #3916 + str r2, [r3, #-996] + ldr r2, .L2202+12 + ldrh r9, [r2, r1] + ldrb r1, [r2, #928] @ zero_extendqisi2 + cmp r1, #0 + beq .L2167 + ldrb r1, [r3, #-1752] @ zero_extendqisi2 + cmp r1, #1 + movweq r1, #3918 + ldreqh r9, [r2, r1] .L2167: - add r1, sp, #56 - mov r2, #0 - mov r0, r5 - str r3, [sp, #4] - bl log2phys - mov r0, r8 - bl get_new_active_ppa - ldr lr, [r4, #3968] - ldr r1, [r4, #3972] - movw r2, #3928 - mov ip, #36 - ldrh r2, [r4, r2] - ldr r6, .L2198 - mla r1, ip, lr, r1 - mul lr, lr, r2 - ldr r6, [r6, #-928] - bic lr, lr, #3 - str r6, [sp, #48] - str lr, [sp, #44] - add r6, r6, lr - str r5, [r1, #16] - str r6, [r1, #12] - str r0, [r1, #4] - movw r0, #3926 - ldrh lr, [r4, r0] - ldr r0, [r4, #3968] - mul lr, r0, lr - ldr r0, .L2198 - bic lr, lr, #3 - str lr, [sp, #12] - ldr lr, [r0, #-948] - ldr r0, [sp, #12] - add lr, lr, r0 - mov r0, r6 - str lr, [r1, #8] - mov r1, #0 - str ip, [sp, #8] - bl ftl_memset - ldr r1, [sp, #16] - ldr ip, [sp, #8] - rsb r3, r1, r5 - rsbs r1, r3, #0 - adc r1, r1, r3 - ldr r3, [sp, #4] - str r1, [sp, #12] - orrs r1, r1, r3 - beq .L2168 - ldr r2, [sp, #12] - cmp r2, #0 - beq .L2169 - movw r3, #3922 - mov r0, r7 - ldrh fp, [r4, r3] - mov r1, fp - bl __aeabi_uidivmod - ldr r3, [sp, #32] - rsb fp, r1, fp - str r1, [sp, #40] - cmp fp, r3 - movcs fp, r3 - b .L2170 -.L2169: - cmp r3, #0 - beq .L2170 - ldr r3, [sp, #32] - movw lr, #3922 - add fp, r3, r7 - ldrh r3, [r4, lr] - mls fp, r3, r5, fp - ldr r3, [sp, #12] - str r3, [sp, #40] - uxth fp, fp -.L2170: - movw lr, #3922 - ldrh r3, [r4, lr] - cmp fp, r3 - bne .L2171 - ldr r3, [sp, #12] - ldr r0, [sl, #3968] - cmp r3, #0 - ldr r2, [sl, #3972] - ldr r3, [sp, #24] - muleq r1, r5, fp - movne r1, r9 - rsbeq r1, r7, r1 - addeq r1, r9, r1, asl #9 - cmp r3, #0 - mov r3, #36 - mla r3, r3, r0, r2 - strne r1, [r3, #8] - bne .L2174 - ldr r0, [r3, #8] - movw r3, #3926 - ldrh r2, [sl, r3] - b .L2196 + ldr r2, .L2202+52 + mov r8, #0 + str fp, [sp, #20] + mov fp, r9 + ldr r4, .L2202 + ldrh r3, [r3, r2] + add r2, r3, r6 + cmp r2, r9 + rsbgt r6, r3, r9 + uxthgt r6, r6 + b .L2169 .L2171: - ldr r2, [sp, #56] - mov r3, #36 - cmn r2, #1 - beq .L2175 - ldr r1, [r4, #3968] - add r0, sp, #60 - str r2, [sp, #64] - ldr r2, [r4, #3972] - str r5, [sp, #76] - mla r3, r3, r1, r2 - mov r1, #1 - ldr r2, [r3, #8] - ldr r3, [r3, #12] - str r2, [sp, #68] - mov r2, #0 - str r3, [sp, #72] + ldrh r1, [r2, #2]! + movw sl, #65535 + add r3, r3, #1 + cmp r1, sl + uxth r3, r3 + orrne r1, ip, r1, asl #10 + mlane sl, r0, r7, lr + addne r7, r7, #1 + uxthne r7, r7 + strne r1, [sl, #4] +.L2177: + cmp r3, r5 + bne .L2171 + ldr r0, [r4, #-1164] + mov r1, r7 + ldrb r2, [r4, #-1752] @ zero_extendqisi2 + mov r5, #0 bl FlashReadPages - ldr r3, [sp, #60] - cmn r3, #1 - ldr r3, .L2198 - ldreq r2, [r3, #-1636] - addeq r2, r2, #1 - streq r2, [r3, #-1636] - beq .L2177 - ldr r2, [r6, #8] - cmp r2, r5 - beq .L2177 - ldr r2, [r3, #-1636] - ldr r0, .L2198+28 - add r2, r2, #1 - str r2, [r3, #-1636] - mov r2, r5 - ldr r1, [r6, #8] - bl printk - b .L2177 -.L2175: - ldr r1, [r4, #3968] - ldr r2, [r4, #3972] - mla r3, r3, r1, r2 - mov r1, #0 - ldr r0, [r3, #8] - movw r3, #3926 + mov r9, r5 + mov sl, r6 + b .L2172 +.L2175: + ldr r3, [r4, #-1164] + add r2, r3, r5 + ldr r3, [r3, r5] + ldr r6, [r2, #12] + cmn r3, #1 + beq .L2173 + ldrh r3, [r6, #0] + movw r1, #61589 + cmp r3, r1 + bne .L2173 + add r1, sp, #28 + mov r2, #0 + ldr r0, [r6, #8] + bl log2phys + ldr r1, [r4, #-1164] + ldr r2, [sp, #28] + add r1, r1, r5 + bic r2, r2, #-2147483648 + ldr r3, [r1, #4] + cmp r2, r3 + bne .L2173 + movw r3, #434 + ldr r0, [r4, #-1180] ldrh r2, [r4, r3] - bl ftl_memset -.L2177: - ldr r3, [sp, #12] - ldr r1, [r4, #3968] - cmp r3, #0 - ldr r2, [r4, #3972] + ldr r1, [r1, #16] + add r2, r2, #1 + strh r2, [r4, r3] @ movhi + ldr r2, [r4, #-968] mov r3, #36 - movweq lr, #3922 + mla r2, r3, r0, r2 + str r1, [r2, #16] + str r2, [sp, #8] + str r3, [sp, #12] + bl Ftl_get_new_temp_ppa + ldr r2, [sp, #8] + ldr r1, [r4, #-1180] + str r0, [r2, #4] + ldr r3, [sp, #12] + ldr r2, [r4, #-968] mla r3, r3, r1, r2 - ldreqh r1, [r4, lr] - movne r1, r9 - mov r2, fp, asl #9 - muleq r1, r1, r5 - ldrne r0, [r3, #8] - ldrne r3, [sp, #40] - rsbeq r1, r7, r1 - ldreq r0, [r3, #8] - addne r0, r0, r3, asl #9 - addeq r1, r9, r1, asl #9 - b .L2196 -.L2168: - ldr r3, [sp, #24] - ldr r2, [r4, #3968] + ldr r2, [r4, #-1164] + add r2, r2, r5 + ldr r1, [r2, #8] + str r1, [r3, #8] + mov r1, #1 + ldr r2, [r2, #12] + str r2, [r3, #12] + ldr r3, [sp, #28] + str r3, [r6, #12] + ldr r3, .L2202+44 + ldrh r3, [r4, r3] + strh r3, [r6, #2] @ movhi + ldr r3, [r4, #-1800] + ldr r0, [r4, #-1164] + str r3, [r6, #4] + add r0, r0, r5 + ldr r3, [r4, #-1180] + add r3, r3, #1 + str r3, [r4, #-1180] + bl FtlGcBufAlloc + ldr r3, .L2202+12 + ldrb r3, [r3, #928] @ zero_extendqisi2 + cmp r3, #0 + bne .L2174 + ldrb r3, [r4, #-1893] @ zero_extendqisi2 + ldr r2, [r4, #-1180] + cmp r2, r3 + beq .L2174 + ldr r3, .L2202+64 + ldrh r3, [r4, r3] + cmp r3, #0 + bne .L2173 +.L2174: + bl Ftl_gc_temp_data_write_back + cmp r0, #0 + ldrne r3, .L2202 + movne r2, #0 + strne r2, [r3, #-996] + movne r2, #432 + bne .L2201 +.L2173: + add r9, r9, #1 + add r5, r5, #36 + uxth r9, r9 +.L2172: + cmp r9, r7 + bne .L2175 + add r8, r8, #1 + mov r6, sl +.L2169: + uxth r3, r8 + ldr r7, .L2202 + cmp r3, r6 + ldr r3, .L2202+52 + bcs .L2176 + ldr r1, .L2202+12 + movw r2, #3848 + ldrh ip, [r4, r3] + mov r7, #0 + ldr lr, [r4, #-1164] + mov r3, r7 + ldrh r5, [r1, r2] + add ip, ip, r8 + ldr r2, .L2202+68 + mov r0, #36 + b .L2177 +.L2176: + ldrh r2, [r7, r3] + mov r9, fp + ldr fp, [sp, #20] + add r6, r6, r2 + uxth r6, r6 + strh r6, [r7, r3] @ movhi + cmp r6, r9 + bcc .L2178 + ldr r3, [r7, #-1180] cmp r3, #0 - ldr r3, [r4, #3972] - mla ip, ip, r2, r3 beq .L2179 - movw lr, #3922 - ldrh r3, [r4, lr] - mul r3, r3, r5 - rsb r3, r7, r3 - add r3, r9, r3, asl #9 - str r3, [ip, #8] - b .L2174 + bl Ftl_gc_temp_data_write_back + cmp r0, #0 + movne r3, #0 + strne r3, [r7, #-996] + movne r3, #432 + ldrneh r0, [r7, r3] + bne .L2139 .L2179: - movw r0, #3922 - movw r3, #3926 - ldrh r1, [r4, r0] - ldrh r2, [r4, r3] - ldr r0, [ip, #8] - mul r1, r1, r5 - rsb r1, r7, r1 - add r1, r9, r1, asl #9 -.L2196: - bl memcpy -.L2174: - ldr r3, .L2198+32 - ldr r0, [sp, #48] - ldr lr, [sp, #44] - strh r3, [r0, lr] @ movhi - ldr r3, .L2198 - str r5, [r6, #8] - add r5, r5, #1 - ldr r2, [r3, #-1800] - str r2, [r6, #4] - add r2, r2, #1 + ldr r3, .L2202 + movw r2, #434 + ldrh ip, [r3, r2] + cmp ip, #0 + bne .L2180 + ldr r2, .L2202+16 + ldr r0, [r3, #-2016] + ldrh r1, [r3, r2] + mov r1, r1, asl #1 + ldrh r4, [r0, r1] + cmp r4, #0 + beq .L2180 + strh ip, [r0, r1] @ movhi + ldrh r0, [r3, r2] + bl update_vpc_list + bl FtlCacheWriteBack + bl l2p_flush + bl FtlVpcTblFlush +.L2180: + ldr r3, .L2202+16 + mvn r1, #0 + ldr r2, .L2202 + strh r1, [r2, r3] @ movhi +.L2178: + ldr r3, .L2202 + ldr r2, .L2202+20 + ldrh r2, [r3, r2] + cmp r2, #2 + ldrls r2, .L2202+12 + movwls r3, #3916 + ldrlsh r6, [r2, r3] + bls .L2197 +.L2181: + mov r1, #0 + str r1, [r3, #-996] + mov r1, #432 + ldrh r0, [r3, r1] + cmp r0, #0 + addeq r0, r2, #1 +.L2139: + add sp, sp, #36 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L2203: + .align 2 +.L2202: + .word .LANCHOR2 + .word -1140 + .word -1142 + .word .LANCHOR0 + .word -1760 + .word -2000 + .word -1194 + .word -1188 + .word .LC149 + .word -1196 + .word .LC150 + .word -1900 + .word -1776 + .word -1758 + .word -1948 + .word -1156 + .word -1896 + .word .LANCHOR2-1746 + .fnend + .size ftl_do_gc.part.23, .-ftl_do_gc.part.23 + .align 2 + .global ftl_do_gc + .type ftl_do_gc, %function +ftl_do_gc: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r3, r4, r5, lr} + .save {r3, r4, r5, lr} + mov r4, r0 + ldr r3, .L2211 + mov r5, r1 + ldr r0, [r3, #4040] + cmp r0, #0 + movne r0, #0 + ldmnefd sp!, {r3, r4, r5, pc} + ldr r3, .L2211+4 + ldr r2, [r3, #-996] + cmp r2, #0 + ldmnefd sp!, {r3, r4, r5, pc} + ldr r1, .L2211+8 + ldrh r1, [r3, r1] + cmp r1, #47 + movls r0, r2 + ldmlsfd sp!, {r3, r4, r5, pc} + ldr r1, .L2211+12 + movw r2, #3000 + ldrh r1, [r1, r2] + movw r2, #65535 + cmp r1, r2 + beq .L2206 + ldr r1, .L2211+16 + ldrh r3, [r3, r1] + cmp r3, r2 + beq .L2206 + mov r0, #1 + bl FtlGcFreeTempBlock + cmp r0, #0 + bne .L2210 +.L2206: + mov r0, r4 + mov r1, r5 + ldmfd sp!, {r3, r4, r5, lr} + b ftl_do_gc.part.23 +.L2210: + mov r0, #1 + ldmfd sp!, {r3, r4, r5, pc} +.L2212: + .align 2 +.L2211: + .word .LANCHOR0 + .word .LANCHOR2 + .word -2008 + .word .LANCHOR1 + .word -1900 + .fnend + .size ftl_do_gc, .-ftl_do_gc + .align 2 + .global FtlCacheWriteBack + .type FtlCacheWriteBack, %function +FtlCacheWriteBack: + .fnstart + @ args = 0, pretend = 0, frame = 8 + @ frame_needed = 0, uses_anonymous_args = 0 + ldr r3, .L2236 + stmfd sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + .save {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + ldr r4, [r3, #440] + ldr r3, .L2236+4 + ldr r2, [r3, #4040] + cmp r2, #0 + bne .L2214 + ldr r1, [r3, #3968] + cmp r1, #0 + beq .L2214 + ldrb r8, [r3, #928] @ zero_extendqisi2 + cmp r8, #0 + beq .L2215 + ldrb r8, [r4, #8] @ zero_extendqisi2 + sub lr, r8, #1 + rsbs r8, lr, #0 + adc r8, r8, lr +.L2215: + ldr r5, .L2236+4 + mov r2, r8 + ldrb r3, [r4, #9] @ zero_extendqisi2 + mov r6, #0 + mov r7, r6 + ldr r9, .L2236 + ldr r0, [r5, #3972] + bl FlashProgPages + b .L2216 +.L2221: + ldr r2, [r5, #3972] + add r3, r2, r6 + ldr r2, [r2, r6] cmn r2, #1 - str r2, [r3, #-1800] - moveq r2, #0 - streq r2, [r3, #-1800] - ldr r3, [sp, #56] - str r3, [r6, #12] - ldrh r3, [r8, #0] - strh r3, [r6, #2] @ movhi - ldr r3, [r4, #3968] - add r3, r3, #1 - str r3, [r4, #3968] - ldr r3, [sp, #28] - add r3, r3, #1 - str r3, [sp, #28] -.L2165: - ldr r6, [sp, #28] - ldr r3, [sp, #52] - cmp r6, r3 - bne .L2181 -.L2166: - ldr r3, [sp, #20] - mov r6, r8 - ldr lr, [sp, #28] - ldr r2, [r4, #3968] - rsb r3, lr, r3 - str r3, [sp, #20] - ldr r3, .L2198 - ldr r0, [sp, #24] - ldr r3, [r3, #-976] - cmp r2, r3 - orrcs r0, r0, #1 - uxtb r3, r0 - cmp r3, #0 - bne .L2182 - ldrh r2, [r8, #4] + beq .L2235 + ldr r2, [r3, #4] + cmp r8, #0 + ldr r0, [r3, #16] + add r1, sp, #4 + str r2, [sp, #4] + orrne r2, r2, #-2147483648 + strne r2, [sp, #4] + mov r2, #1 + bl log2phys + ldr r3, [r5, #3972] + add r3, r3, r6 + ldr r3, [r3, #12] + ldr r0, [r3, #12] + cmn r0, #1 + beq .L2219 + ubfx r0, r0, #10, #16 + bl P2V_block_in_plane + ldr r2, [r9, #-2016] + mov r3, r0, asl #1 + mov sl, r0 + ldrh r2, [r2, r3] cmp r2, #0 - bne .L2192 -.L2182: - bl FtlCacheWriteBack - ldr lr, [sp, #20] + bne .L2220 + ldr r0, .L2236+8 + mov r1, sl + bl printk +.L2220: + mov r0, sl + bl decrement_vpc_count +.L2219: + add r7, r7, #1 + add r6, r6, #36 +.L2216: + ldr r3, [r5, #3968] + cmp r7, r3 + bcc .L2221 + b .L2222 +.L2231: + ldr r3, [r5, #3972] + mvn r2, #0 + ldr r7, .L2236 + str r2, [r3, r6] + b .L2223 +.L2227: + ldr r0, [r3, #4] + ubfx r0, r0, #10, #16 + bl P2V_block_in_plane + ldrh r3, [r4, #0] + cmp r3, r0 + bne .L2224 + ldr r2, [r7, #-2016] + mov r3, r3, asl #1 + ldrh r1, [r4, #4] + ldrh r0, [r2, r3] + rsb r1, r1, r0 + strh r1, [r2, r3] @ movhi + movw r3, #3916 + ldrh r3, [r5, r3] + strh r3, [r4, #2] @ movhi mov r3, #0 - str r3, [sl, #3968] - cmp lr, #1 - ldr r3, [sp, #24] - movls r3, #0 -.L2192: - str r3, [sp, #24] -.L2195: - ldr r3, [sp, #20] - ldr r8, .L2198 + strb r3, [r4, #6] + strh r3, [r4, #4] @ movhi +.L2224: + ldrh r3, [r4, #4] cmp r3, #0 - bne .L2184 - mov r0, r3 - ldr r6, [sp, #36] - ldr r3, [sp, #16] - rsb r1, r3, r6 - bl ftl_do_gc - ldr r3, .L2198+36 - ldrh r3, [r8, r3] - cmp r3, #31 - bhi .L2157 - ldr r2, .L2198+40 - mov r3, #128 - mov r4, #16 - strh r3, [r8, r2] @ movhi - sub r2, r2, #2 - strh r3, [r8, r2] @ movhi -.L2185: - mov r0, #0 + bne .L2225 + mov r0, r4 + bl allocate_new_data_superblock +.L2225: + ldr r3, [r7, #-1612] + add r3, r3, #1 + str r3, [r7, #-1612] + ldr r3, [r5, #3972] + add r3, r3, r6 + ldr r0, [r3, #4] + ubfx r0, r0, #10, #16 + bl FtlGcMarkBadPhyBlk + mov r0, r4 + bl get_new_active_ppa mov r1, #1 - bl ftl_do_gc - ldr r3, [r8, #-2088] + mov r2, r8 + mov r3, r0 + str r0, [sp, #4] + ldr r0, [r5, #3972] + add r0, r0, r6 + str r3, [r0, #4] + ldrb r3, [r4, #9] @ zero_extendqisi2 + bl FlashProgPages + ldr r3, [r5, #3972] + ldr r3, [r3, r6] + cmn r3, #1 + moveq r3, #1 + streq r3, [r5, #4040] + ldr r3, [r9, #4040] cmp r3, #0 - bne .L2157 + bne .L2214 +.L2223: + ldr r2, [r5, #3972] + add r3, r2, r6 + ldr r2, [r2, r6] + cmn r2, #1 + beq .L2227 + ldr r2, [r3, #4] + cmp r8, #0 + ldr r0, [r3, #16] + add r1, sp, #4 + str r2, [sp, #4] + orrne r2, r2, #-2147483648 + strne r2, [sp, #4] + mov r2, #1 + bl log2phys + ldr r3, [r5, #3972] + add r3, r3, r6 + ldr r3, [r3, #12] + ldr r0, [r3, #12] + cmn r0, #1 + beq .L2229 + ubfx r0, r0, #10, #16 + bl P2V_block_in_plane + ldr r3, .L2236 + ldr r2, [r3, #-2016] + mov r3, r0, asl #1 + mov r7, r0 + ldrh r2, [r2, r3] + cmp r2, #0 + bne .L2230 + ldr r0, .L2236+8 + mov r1, r7 + bl printk +.L2230: + mov r0, r7 + bl decrement_vpc_count +.L2229: + add sl, sl, #1 + add r6, r6, #36 + b .L2217 +.L2235: + ldr r5, .L2236+4 + mov r6, #0 + mov sl, r6 + mov r9, r5 +.L2217: + ldr r3, [r5, #3968] + cmp sl, r3 + bcc .L2231 + movw r4, #16386 + ldr r6, .L2236 + ldr r5, .L2236+12 + b .L2232 +.L2233: + mov r0, #1 + mov r1, r0 + bl ftl_do_gc subs r4, r4, #1 - bne .L2185 -.L2157: + beq .L2222 +.L2232: + ldrh r3, [r6, r5] + cmp r3, #0 + bne .L2233 +.L2222: + ldr r3, .L2236+4 + mov r2, #0 + str r2, [r3, #3968] +.L2214: mov r0, #0 - add sp, sp, #100 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2199: + ldmfd sp!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, pc} +.L2237: .align 2 -.L2198: +.L2236: .word .LANCHOR2 .word .LANCHOR0 - .word .LANCHOR2-1996 - .word .LANCHOR1 - .word -1944 - .word .LANCHOR2-1948 - .word -1992 - .word .LC139 - .word -3947 - .word -2000 - .word -1194 + .word .LC151 + .word -1138 .fnend - .size ftl_write.part.22, .-ftl_write.part.22 + .size FtlCacheWriteBack, .-FtlCacheWriteBack .align 2 - .global ftl_write - .type ftl_write, %function -ftl_write: + .global ftl_cache_flush + .type ftl_cache_flush, %function +ftl_cache_flush: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - mov ip, r0 - mov r0, r1 - mov r1, r2 - mov r2, r3 - ldr r3, .L2205 - ldr r3, [r3, #-2088] + b FtlCacheWriteBack + .fnend + .size ftl_cache_flush, .-ftl_cache_flush + .align 2 + .global rk_ftl_cache_write_back + .type rk_ftl_cache_write_back, %function +rk_ftl_cache_write_back: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + b FtlCacheWriteBack + .fnend + .size rk_ftl_cache_write_back, .-rk_ftl_cache_write_back + .align 2 + .global FtlSysFlush + .type FtlSysFlush, %function +FtlSysFlush: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r3, lr} + .save {r3, lr} + ldr r3, .L2242 + ldr r3, [r3, #4040] cmp r3, #0 - movne r0, #0 - bxne lr - cmp ip, #16 - bne .L2202 - add r0, r0, #256 - b FtlVendorPartWrite -.L2202: - ldr r3, .L2205+4 - add ip, r1, r0 - ldr r3, [r3, #3956] - cmp ip, r3 - bhi .L2204 - b ftl_write.part.22 -.L2204: - mvn r0, #0 - bx lr -.L2206: + bne .L2241 + bl FtlCacheWriteBack + bl l2p_flush + mov r0, #1 + bl FtlEctTblFlush + bl FtlVpcTblFlush +.L2241: + mov r0, #0 + ldmfd sp!, {r3, pc} +.L2243: .align 2 -.L2205: - .word .LANCHOR2 +.L2242: .word .LANCHOR0 .fnend - .size ftl_write, .-ftl_write + .size FtlSysFlush, .-FtlSysFlush .align 2 - .global FtlWrite - .type FtlWrite, %function -FtlWrite: + .global FtlDeInit + .type FtlDeInit, %function +FtlDeInit: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - b ftl_write + stmfd sp!, {r3, lr} + .save {r3, lr} + ldr r3, .L2246 + ldr r3, [r3, #2996] + cmp r3, #1 + bne .L2245 + bl FtlSysFlush +.L2245: + mov r0, #0 + ldmfd sp!, {r3, pc} +.L2247: + .align 2 +.L2246: + .word .LANCHOR1 .fnend - .size FtlWrite, .-FtlWrite + .size FtlDeInit, .-FtlDeInit .align 2 - .global ftl_sys_write - .type ftl_sys_write, %function -ftl_sys_write: + .global ftl_deinit + .type ftl_deinit, %function +ftl_deinit: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - mov ip, r1 - mov r3, r2 - add r1, r0, #256 - mov r2, ip - mov r0, #16 - b ftl_write + stmfd sp!, {r3, lr} + .save {r3, lr} + bl ftl_flash_de_init + bl FtlDeInit + ldmfd sp!, {r3, lr} + b ftl_flash_de_init .fnend - .size ftl_sys_write, .-ftl_sys_write + .size ftl_deinit, .-ftl_deinit .align 2 - .global StorageSysDataStore - .type StorageSysDataStore, %function -StorageSysDataStore: + .global rk_ftl_de_init + .type rk_ftl_de_init, %function +rk_ftl_de_init: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, lr} - .save {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - bl rknand_device_lock - mov r2, r4 - mov r1, #1 - mov r0, r5 - bl ftl_sys_write - mov r4, r0 - bl rknand_device_unlock - mov r0, r4 - ldmfd sp!, {r3, r4, r5, pc} + stmfd sp!, {r3, lr} + .save {r3, lr} + mov r1, #0 + ldr r0, .L2250 + bl printk + ldmfd sp!, {r3, lr} + b ftl_deinit +.L2251: + .align 2 +.L2250: + .word .LC152 .fnend - .size StorageSysDataStore, .-StorageSysDataStore + .size rk_ftl_de_init, .-rk_ftl_de_init .align 2 - .global ftl_vendor_write - .type ftl_vendor_write, %function -ftl_vendor_write: + .global rk_ftl_garbage_collect + .type rk_ftl_garbage_collect, %function +rk_ftl_garbage_collect: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - mov ip, r1 - mov r3, r2 - stmfd sp!, {r4, lr} - .save {r4, lr} - mov r4, r0 + @ link register save eliminated. + b ftl_do_gc + .fnend + .size rk_ftl_garbage_collect, .-rk_ftl_garbage_collect + .align 2 + .global ftl_fix_nand_power_lost_error + .type ftl_fix_nand_power_lost_error, %function +ftl_fix_nand_power_lost_error: + .fnstart + @ args = 0, pretend = 0, frame = 48 + @ frame_needed = 0, uses_anonymous_args = 0 + ldr r3, .L2262 + stmfd sp!, {r4, r5, r6, r7, r8, sl, lr} + .save {r4, r5, r6, r7, r8, sl, lr} + .pad #52 + sub sp, sp, #52 + ldrb r3, [r3, #928] @ zero_extendqisi2 + cmp r3, #0 + beq .L2253 + ldr r4, .L2262+4 + movw r3, #294 + ldr r0, .L2262+8 + movw r7, #4097 + ldrh r6, [r4, r3] + ldr r3, [r4, #-2016] + mov r5, r6, asl #1 + mov r1, r6 + ldrh r2, [r3, r5] + bl printk + ldr r3, .L2262+12 + ldrh r0, [r4, r3] + bl FtlGcRefreshOpenBlock + ldr r3, .L2262+16 + ldrh r0, [r4, r3] + bl FtlGcRefreshOpenBlock + ldr r0, .L2262+20 + bl allocate_new_data_superblock + ldr r0, .L2262+24 + bl allocate_new_data_superblock + b .L2255 +.L2257: + mov r0, #1 + mov r1, r0 + bl ftl_do_gc + ldr r3, [r4, #-2016] + ldrh r3, [r3, r5] + cmp r3, #0 + beq .L2256 +.L2255: + subs r7, r7, #1 + bne .L2257 +.L2256: + ldr r4, .L2262+4 + mov r1, r6 + ldr r0, .L2262+8 + ldr r3, [r4, #-2016] + ldrh r2, [r3, r5] + bl printk + ldr r3, [r4, #-2016] + ldrh r4, [r3, r5] + cmp r4, #0 + bne .L2258 + add r7, sp, #48 + mov r0, sp + strh r6, [r7, #-48]! @ movhi + add r7, r7, #14 + bl make_superblock + ldr r3, .L2262 + movw r2, #3848 + movw lr, #65535 + mov ip, #36 mov r1, r4 - mov r0, #16 - mov r2, ip - ldmfd sp!, {r4, lr} - b ftl_write + ldrh r8, [r3, r2] + ldr sl, [r3, #4044] + mov r3, r4 + b .L2259 +.L2261: + ldrh r0, [r7, #2]! + cmp r0, lr + beq .L2260 + mla r2, ip, r4, sl + add r4, r4, #1 + mov r0, r0, asl #10 + uxth r4, r4 + stmib r2, {r0, r1} + str r1, [r2, #12] +.L2260: + add r3, r3, #1 + uxth r3, r3 +.L2259: + cmp r3, r8 + bne .L2261 + ldr r3, .L2262+4 + mov r1, r6 + ldr r0, .L2262+28 + ldr r3, [r3, #-2016] + ldrh r2, [r3, r5] + ldr r5, .L2262 + bl printk + mov r1, #0 + mov r2, r4 + ldr r0, [r5, #4044] + bl FlashEraseBlocks + ldr r0, [r5, #4044] + mov r1, #1 + mov r2, r4 + bl FlashEraseBlocks +.L2258: + ldr r2, .L2262+4 + movw r3, #294 + mvn r1, #0 + strh r1, [r2, r3] @ movhi +.L2253: + add sp, sp, #52 + ldmfd sp!, {r4, r5, r6, r7, r8, sl, pc} +.L2263: + .align 2 +.L2262: + .word .LANCHOR0 + .word .LANCHOR2 + .word .LC153 + .word -1996 + .word -1948 + .word .LANCHOR2-1996 + .word .LANCHOR2-1948 + .word .LC154 .fnend - .size ftl_vendor_write, .-ftl_vendor_write + .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error .align 2 - .global FlashBootVendorWrite - .type FlashBootVendorWrite, %function -FlashBootVendorWrite: + .global FtlInit + .type FtlInit, %function +FtlInit: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 +.L2265: stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl rknand_device_lock - mov r2, r4 - mov r1, r5 - mov r0, r6 - bl ftl_vendor_write - mov r4, r0 - bl rknand_device_unlock - mov r0, r4 + mvn r3, #0 + ldr r4, .L2275 + ldr r6, .L2275+4 + ldr r5, .L2275+8 + ldr r1, .L2275+12 + str r3, [r6, #2996] + mov r3, #0 + ldr r0, .L2275+16 + str r3, [r4, #4040] + str r3, [r5, #444] + bl printk + ldr r0, .L2275+20 + bl FtlConstantsInit + bl FtlMemInit + bl FtlVariablesInit + ldr r0, [r4, #3852] + uxth r0, r0 + bl FtlFreeSysBlkQueueInit + bl FtlLoadBbt + cmp r0, #0 + ldrne r0, .L2275+24 + bne .L2274 + bl FtlSysBlkInit + cmp r0, #0 + beq .L2268 + ldr r0, .L2275+28 +.L2274: + ldr r1, .L2275+32 + bl printk + b .L2267 +.L2268: + mov r1, #1 + str r1, [r6, #2996] + bl ftl_do_gc + ldr r3, .L2275+36 + ldrh r3, [r5, r3] + cmp r3, #15 + bhi .L2269 + mov r4, #1024 +.L2270: + mov r0, #1 + mov r1, r0 + bl ftl_do_gc + subs r4, r4, #1 + bne .L2270 + b .L2267 +.L2269: + ldrb r3, [r4, #928] @ zero_extendqisi2 + cmp r3, #0 + beq .L2267 + mov r4, #128 +.L2271: + mov r0, #1 + mov r1, r0 + bl ftl_do_gc + subs r4, r4, #1 + bne .L2271 +.L2267: + mov r0, #0 ldmfd sp!, {r4, r5, r6, pc} - .fnend - .size FlashBootVendorWrite, .-FlashBootVendorWrite +.L2276: .align 2 - .global ftl_read - .type ftl_read, %function -ftl_read: +.L2275: + .word .LANCHOR0 + .word .LANCHOR1 + .word .LANCHOR2 + .word .LC79 + .word .LC78 + .word .LANCHOR0+3048 + .word .LC155 + .word .LC156 + .word .LANCHOR3+69 + .word -2000 + .fnend + .size FtlInit, .-FtlInit + .align 2 + .global ftl_discard + .type ftl_discard, %function +ftl_discard: .fnstart - @ args = 0, pretend = 0, frame = 64 + @ args = 0, pretend = 0, frame = 8 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} - cmp r0, #16 - .pad #68 - sub sp, sp, #68 + stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, lr} + .save {r0, r1, r2, r4, r5, r6, r7, lr} + add r2, r1, r0 + ldr r5, .L2287 + mov r7, r0 mov r4, r1 - mov r8, r3 - str r2, [sp, #28] - bne .L2213 - add r0, r1, #256 - mov r1, r2 - mov r2, r3 - bl FtlVendorPartRead - str r0, [sp, #16] - b .L2214 -.L2213: - ldr r3, [sp, #28] - add r3, r3, r1 - str r3, [sp, #20] - ldr r3, .L2243 - ldr r1, [sp, #20] - ldr r2, [r3, #3956] - cmp r1, r2 - mvnhi r3, #0 - strhi r3, [sp, #16] - bhi .L2214 - movw r2, #3922 - mov r0, r4 - ldrh r5, [r3, r2] - mov r1, r5 - bl __aeabi_uidiv - ldr r3, [sp, #20] - mov r1, r5 - str r0, [sp, #12] - sub r0, r3, #1 - bl __aeabi_uidiv - ldr r1, [sp, #12] - rsb r3, r1, #1 - ldr r1, [sp, #28] - add r3, r3, r0 - str r3, [sp, #8] - ldr r3, .L2243+4 - mov fp, r0 - ldr r0, [sp, #12] - ldr r2, [r3, #-1808] - add r2, r1, r2 - ldr r1, [sp, #8] - str r2, [r3, #-1808] - ldr r2, [r3, #-1836] - add r2, r1, r2 - mov r1, fp - str r2, [r3, #-1836] - bl FtlCacheMetchLpa - cmp r0, #0 - beq .L2215 + ldr r3, [r5, #3956] + cmp r2, r3 + mvnhi r0, #0 + bhi .L2278 + cmp r1, #31 + bls .L2285 + ldr r3, [r5, #4040] + cmp r3, #0 + bne .L2285 bl FtlCacheWriteBack -.L2215: - mov r9, #0 - ldr r6, [sp, #12] - str r9, [sp, #32] - mov r5, r9 - str r9, [sp, #16] - ldr r7, .L2243 - b .L2238 -.L2232: - mov r2, #0 - mov r0, r6 - add r1, sp, #60 - bl log2phys - ldr r2, [sp, #60] - cmn r2, #1 - bne .L2239 - b .L2242 -.L2220: - mla r0, r0, r6, sl - cmp r0, r4 - bcc .L2219 - ldr r2, [sp, #20] - cmp r0, r2 - bcs .L2219 - rsb r0, r4, r0 - mov r1, #0 - mov r2, #512 - str r3, [sp, #4] - add r0, r8, r0, asl #9 - bl ftl_memset - ldr r3, [sp, #4] -.L2219: - add sl, sl, #1 - b .L2217 -.L2242: - mov sl, #0 movw r3, #3922 -.L2217: - ldrh r0, [r7, r3] - cmp sl, r0 - bcc .L2220 - b .L2221 -.L2239: - ldr r3, .L2243+4 - mov sl, #36 - ldr r1, [r3, #-972] - mla sl, sl, r5, r1 - ldr r1, [sp, #12] - cmp r6, r1 - str r2, [sl, #4] - movw r2, #3922 - bne .L2222 - ldr r3, [r3, #-944] - mov r0, r4 - str r3, [sl, #8] - ldrh r3, [r7, r2] - mov r1, r3 + ldrh r6, [r5, r3] + mov r0, r7 + mov r1, r6 + bl __aeabi_uidiv + mls r7, r0, r6, r7 + mov r5, r0 + uxth r7, r7 + cmp r7, #0 + beq .L2279 + rsb r6, r7, r6 + add r5, r0, #1 + cmp r6, r4 + movcs r6, r4 + uxth r6, r6 + rsb r4, r6, r4 +.L2279: + mvn r3, #0 + ldr r7, .L2287 str r3, [sp, #4] - bl __aeabi_uidivmod - ldr r3, [sp, #4] - str r1, [sp, #36] - rsb r2, r1, r3 - ldr r1, [sp, #28] - cmp r2, r1 - movcc r1, r2 - str r1, [sp, #32] - cmp r1, r3 - streq r8, [sl, #8] - b .L2223 -.L2222: - cmp r6, fp - ldrneh r3, [r7, r2] - mulne r3, r3, r6 - bne .L2240 - ldr r3, [r3, #-940] - ldrh r2, [r7, r2] - ldr r1, [sp, #20] - str r3, [sl, #8] - mul r3, r2, r6 - rsb r9, r3, r1 - cmp r9, r2 - bne .L2223 -.L2240: - rsb r3, r4, r3 - add r3, r8, r3, asl #9 - str r3, [sl, #8] -.L2223: - movw r3, #3928 - ldr r2, .L2243+4 - ldrh r3, [r7, r3] - str r6, [sl, #16] - ldr r2, [r2, #-932] - mul r3, r3, r5 - add r5, r5, #1 - bic r3, r3, #3 - add r3, r2, r3 - str r3, [sl, #12] -.L2221: - ldr r3, [sp, #8] - add r6, r6, #1 - subs r3, r3, #1 - str r3, [sp, #8] - beq .L2225 - movw r3, #3848 - ldrh r3, [r7, r3] - cmp r5, r3, asl #3 - bne .L2238 -.L2225: - cmp r5, #0 - beq .L2238 - ldr sl, .L2243+4 - mov r1, r5 + movw r6, #3922 + b .L2280 +.L2282: + mov r0, r5 + mov r1, sp mov r2, #0 - ldr r0, [sl, #-972] - bl FlashReadPages - ldr r3, [sp, #36] - str r6, [sp, #52] - mov r6, r5 - mov r3, r3, asl #9 - str r3, [sp, #40] - ldr r3, [sp, #32] - mov r3, r3, asl #9 - str r3, [sp, #44] - mov r3, r9, asl #9 - str r3, [sp, #48] - mov r3, #0 - str r3, [sp, #24] -.L2231: - ldr r3, [sp, #24] - mov r5, #36 - ldr r1, [sp, #12] - mul r5, r5, r3 - ldr r3, [sl, #-972] - add r3, r3, r5 - ldr r2, [r3, #16] - cmp r2, r1 - bne .L2227 - ldr r1, [r3, #8] - ldr r3, [sl, #-944] - cmp r1, r3 - bne .L2228 - ldr r3, [sp, #40] - mov r0, r8 - ldr r2, [sp, #44] - add r1, r1, r3 - b .L2241 -.L2227: - cmp r2, fp - bne .L2228 - ldr r1, [r3, #8] - ldr r3, [sl, #-940] - cmp r1, r3 - bne .L2228 - movw r2, #3922 - ldrh r0, [r7, r2] - ldr r2, [sp, #48] - mul r0, r0, fp - rsb r0, r4, r0 - add r0, r8, r0, asl #9 -.L2241: - bl memcpy -.L2228: - ldr r3, [sl, #-972] - add r0, r3, r5 - ldr r2, [r3, r5] - cmn r2, #1 - streq r2, [sp, #16] - ldreq r1, [sl, #-1636] - addeq r1, r1, #1 - streq r1, [sl, #-1636] - ldr r3, [r3, r5] - cmp r3, #256 - bne .L2230 - ldr r0, [r0, #4] - ubfx r0, r0, #10, #16 - bl P2V_block_in_plane - bl FtlGcRefreshBlock -.L2230: - ldr r3, [sp, #24] - add r3, r3, #1 - str r3, [sp, #24] - cmp r3, r6 - bne .L2231 - ldr r6, [sp, #52] - mov r5, #0 -.L2238: - ldr r3, [sp, #8] - cmp r3, #0 - bne .L2232 - ldr r3, .L2243+8 - ldr r2, .L2243+4 - ldrh r3, [r2, r3] - cmp r3, #0 - beq .L2214 - ldr r0, [sp, #8] - mov r1, #1 - bl ftl_do_gc -.L2214: - ldr r0, [sp, #16] - add sp, sp, #68 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2244: + bl log2phys + ldr r3, [sp, #0] + cmn r3, #1 + beq .L2281 + ldr r3, .L2287+4 + add r1, sp, #4 + mov r0, r5 + ldr r2, [r3, #448] + add r2, r2, #1 + str r2, [r3, #448] + ldr r2, [r3, #-1832] + add r2, r2, #1 + str r2, [r3, #-1832] + mov r2, #1 + bl log2phys + ldr r0, [sp, #0] + ubfx r0, r0, #10, #16 + bl P2V_block_in_plane + bl decrement_vpc_count +.L2281: + ldrh r3, [r7, r6] + add r5, r5, #1 + rsb r4, r3, r4 +.L2280: + ldrh r3, [r7, r6] + cmp r4, r3 + bcs .L2282 + ldr r3, .L2287+4 + mov r4, #0 + ldr r2, [r3, #448] + cmp r2, #32 + bls .L2286 + str r4, [r3, #448] + bl l2p_flush + bl FtlVpcTblFlush + b .L2286 +.L2285: + mov r0, #0 + b .L2278 +.L2286: + mov r0, r4 +.L2278: + ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, pc} +.L2288: .align 2 -.L2243: +.L2287: .word .LANCHOR0 .word .LANCHOR2 - .word -1138 - .fnend - .size ftl_read, .-ftl_read - .align 2 - .global FtlRead - .type FtlRead, %function -FtlRead: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. - b ftl_read .fnend - .size FtlRead, .-FtlRead + .size ftl_discard, .-ftl_discard .align 2 - .global ftl_sys_read - .type ftl_sys_read, %function -ftl_sys_read: + .global FtlDiscard + .type FtlDiscard, %function +FtlDiscard: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - mov ip, r1 - mov r3, r2 - add r1, r0, #256 - mov r2, ip - mov r0, #16 - b ftl_read + b ftl_discard .fnend - .size ftl_sys_read, .-ftl_sys_read + .size FtlDiscard, .-FtlDiscard .align 2 - .global StorageSysDataLoad - .type StorageSysDataLoad, %function -StorageSysDataLoad: + .type ftl_write.part.24, %function +ftl_write.part.24: .fnstart - @ args = 0, pretend = 0, frame = 0 + @ args = 0, pretend = 0, frame = 96 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, lr} - .save {r3, r4, r5, lr} - mov r2, #512 - mov r5, r0 - mov r4, r1 - mov r0, r1 + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + mov r3, #2048 + ldr r4, .L2335 + .pad #100 + sub sp, sp, #100 + ldr r8, .L2335+4 + mov r5, r1 + mov r7, r0 + mov r9, r2 + str r3, [r4, #452] + movw r3, #3922 + ldrh r6, [r8, r3] + mov r1, r6 + bl __aeabi_uidiv + mov r1, r6 + str r0, [sp, #16] + sub r0, r7, #1 + add r0, r0, r5 + bl __aeabi_uidiv + ldr r3, [sp, #16] + ldr sl, [r8, #3968] + cmp sl, #0 + rsb fp, r3, r0 + str r0, [sp, #36] + add r3, fp, #1 + str r3, [sp, #20] + ldr lr, [sp, #20] + ldr r3, [r4, #-1828] + add r3, lr, r3 + str r3, [r4, #-1828] + ldr r3, [r4, #-1812] + add r3, r5, r3 + str r3, [r4, #-1812] + beq .L2323 + ldr r3, [r8, #3972] + sub sl, sl, #1 + mov r2, #36 + ldr r0, [sp, #16] + mla sl, r2, sl, r3 + ldr r3, [sl, #16] + cmp r0, r3 + strne r5, [sp, #32] + bne .L2292 + ldr r3, [r4, #-1824] + mov r0, r7 + mov r1, r6 + add r3, r3, #1 + str r3, [r4, #-1824] + ldr r3, [r4, #456] + add r3, r3, #1 + str r3, [r4, #456] + bl __aeabi_uidivmod + ldr r0, [sl, #8] + rsb r8, r1, r6 + add r0, r0, r1, asl #9 + cmp r8, r5 + movcs r8, r5 + mov r1, r9 + mov r3, r8, asl #9 + str r3, [sp, #4] + mov r2, r3 + bl memcpy + cmp fp, #0 + ldr r3, [sp, #4] + bne .L2293 + ldr r2, [r4, #456] + cmp r2, #2 + ble .L2294 +.L2293: + add r9, r9, r3 + add r7, r7, r8 + ldr r3, [sp, #16] + rsb r1, r8, r5 + str fp, [sp, #20] + add r3, r3, #1 + str r1, [sp, #32] + str r3, [sp, #16] +.L2292: + ldr r3, .L2335 + mov r2, #0 + str r2, [r3, #456] + b .L2291 +.L2323: + str r5, [sp, #32] +.L2291: + ldr r0, [sp, #16] + ldr r1, [sp, #36] + bl FtlCacheMetchLpa + cmp r0, #0 + beq .L2295 + bl FtlCacheWriteBack +.L2295: + cmp r5, r6, asl #1 + ldr r3, .L2335 + ldr r4, .L2335+4 + mov fp, #0 + movcc r6, #0 + movcs r6, #1 + str r6, [sp, #24] + ldr r6, .L2335+8 + ldr r5, [sp, #16] + mov sl, r4 + str fp, [sp, #40] + str r6, [r3, #440] + b .L2332 +.L2321: + ldrh r1, [r6, #4] + cmp r1, #0 + bne .L2297 + ldr r2, .L2335+8 + ldr r3, .L2335+12 + cmp r6, r2 + bne .L2298 + ldr r2, .L2335+16 + ldrh r8, [r8, r2] + cmp r8, #0 + bne .L2299 + ldr r0, .L2335+20 + str r3, [sp, #4] + bl allocate_new_data_superblock + ldr r3, [sp, #4] + str r8, [r3, #3004] +.L2299: + ldr r0, .L2335+8 + str r3, [sp, #4] + bl allocate_new_data_superblock + ldr r3, [sp, #4] + ldr r2, [r3, #3004] + ldr r3, .L2335+20 + cmp r2, #0 + movne r6, r3 + b .L2300 +.L2298: + str r1, [r3, #3004] + ldr r3, .L2335+24 + ldrh r3, [r8, r3] + cmp r3, #0 + movne r6, r2 + bne .L2300 + mov r0, r6 + bl allocate_new_data_superblock +.L2300: + ldrh r3, [r6, #4] + cmp r3, #0 + bne .L2301 + mov r0, r6 + bl allocate_new_data_superblock +.L2301: + ldr r3, .L2335 + str r6, [r3, #440] +.L2297: + ldr r2, .L2335 + mov r8, r6 + ldrh r3, [r6, #4] + ldr r1, [r2, #-976] + ldr r2, [r4, #3968] + rsb r2, r2, r1 + cmp r3, r2 + movcc r2, r3 + ldr r3, [sp, #20] + cmp r2, r3 + movcc r3, r2 + str r3, [sp, #52] + mov r3, #0 + str r3, [sp, #28] + b .L2302 +.L2318: + ldrh r3, [r8, #4] + cmp r3, #0 + beq .L2303 + ldr r6, [sp, #36] + rsb r2, r6, r5 + ldr r6, [sp, #24] + rsbs r3, r2, #0 + adc r3, r3, r2 + tst r3, r6 + beq .L2304 + ldr r6, [sp, #28] + cmp r6, #0 + beq .L2304 + movw lr, #3922 + ldr r6, [sp, #32] + ldrh r2, [r4, lr] + add r1, r6, r7 + mls r1, r2, r5, r1 + cmp r1, r2 + bne .L2303 +.L2304: + add r1, sp, #56 + mov r2, #0 + mov r0, r5 + str r3, [sp, #4] + bl log2phys + mov r0, r8 + bl get_new_active_ppa + ldr lr, [r4, #3968] + ldr r1, [r4, #3972] + movw r2, #3928 + mov ip, #36 + ldrh r2, [r4, r2] + ldr r6, .L2335 + mla r1, ip, lr, r1 + mul lr, lr, r2 + ldr r6, [r6, #-928] + bic lr, lr, #3 + str r6, [sp, #48] + str lr, [sp, #44] + add r6, r6, lr + str r5, [r1, #16] + str r6, [r1, #12] + str r0, [r1, #4] + movw r0, #3926 + ldrh lr, [r4, r0] + ldr r0, [r4, #3968] + mul lr, r0, lr + ldr r0, .L2335 + bic lr, lr, #3 + str lr, [sp, #12] + ldr lr, [r0, #-948] + ldr r0, [sp, #12] + add lr, lr, r0 + mov r0, r6 + str lr, [r1, #8] mov r1, #0 + str ip, [sp, #8] bl ftl_memset - bl rknand_device_lock - mov r2, r4 - mov r1, #1 - mov r0, r5 - bl ftl_sys_read - mov r4, r0 - bl rknand_device_unlock - mov r0, r4 - ldmfd sp!, {r3, r4, r5, pc} - .fnend - .size StorageSysDataLoad, .-StorageSysDataLoad - .align 2 - .global ftl_vendor_read - .type ftl_vendor_read, %function -ftl_vendor_read: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - mov ip, r1 - mov r3, r2 - stmfd sp!, {r4, lr} - .save {r4, lr} - mov r4, r0 - mov r1, r4 - mov r0, #16 - mov r2, ip - ldmfd sp!, {r4, lr} - b ftl_read - .fnend - .size ftl_vendor_read, .-ftl_vendor_read - .align 2 - .global FlashBootVendorRead - .type FlashBootVendorRead, %function -FlashBootVendorRead: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, lr} - .save {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl rknand_device_lock - mov r2, r4 - mov r1, r5 - mov r0, r6 - bl ftl_vendor_read - mov r4, r0 - bl rknand_device_unlock - mov r0, r4 - ldmfd sp!, {r4, r5, r6, pc} - .fnend - .size FlashBootVendorRead, .-FlashBootVendorRead - .align 2 - .type rk_ftl_vendor_ops.constprop.26, %function -rk_ftl_vendor_ops.constprop.26: - .fnstart - @ args = 0, pretend = 0, frame = 0 - @ frame_needed = 0, uses_anonymous_args = 0 - @ link register save eliminated. + ldr r1, [sp, #16] + ldr ip, [sp, #8] + rsb r3, r1, r5 + rsbs r1, r3, #0 + adc r1, r1, r3 + ldr r3, [sp, #4] + str r1, [sp, #12] + orrs r1, r1, r3 + beq .L2305 + ldr r2, [sp, #12] cmp r2, #0 - mov r3, r0 - mov r2, r3 - mov r0, r1 - mov r1, #128 - beq .L2251 - b FlashBootVendorWrite -.L2251: - b FlashBootVendorRead - .fnend - .size rk_ftl_vendor_ops.constprop.26, .-rk_ftl_vendor_ops.constprop.26 - .align 2 - .global FlashLoadFactorBbt - .type FlashLoadFactorBbt, %function -FlashLoadFactorBbt: - .fnstart - @ args = 0, pretend = 0, frame = 48 - @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} - movw r2, #3062 - ldr r9, .L2261 - movw r3, #3060 - ldr r4, .L2261+4 - .pad #52 - sub sp, sp, #52 + beq .L2306 + movw r3, #3922 + mov r0, r7 + ldrh fp, [r4, r3] + mov r1, fp + bl __aeabi_uidivmod + ldr r3, [sp, #32] + rsb fp, r1, fp + str r1, [sp, #40] + cmp fp, r3 + movcs fp, r3 + b .L2307 +.L2306: + cmp r3, #0 + beq .L2307 + ldr r3, [sp, #32] + movw lr, #3922 + add fp, r3, r7 + ldrh r3, [r4, lr] + mls fp, r3, r5, fp + ldr r3, [sp, #12] + str r3, [sp, #40] + uxth fp, fp +.L2307: + movw lr, #3922 + ldrh r3, [r4, lr] + cmp fp, r3 + bne .L2308 + ldr r3, [sp, #12] + ldr r0, [sl, #3968] + cmp r3, #0 + ldr r2, [sl, #3972] + ldr r3, [sp, #24] + muleq r1, r5, fp + movne r1, r9 + rsbeq r1, r7, r1 + addeq r1, r9, r1, asl #9 + cmp r3, #0 + mov r3, #36 + mla r3, r3, r0, r2 + strne r1, [r3, #8] + bne .L2311 + ldr r0, [r3, #8] + movw r3, #3926 + ldrh r2, [sl, r3] + b .L2333 +.L2308: + ldr r2, [sp, #56] + mov r3, #36 + cmn r2, #1 + beq .L2312 + ldr r1, [r4, #3968] + add r0, sp, #60 + str r2, [sp, #64] + ldr r2, [r4, #3972] + str r5, [sp, #76] + mla r3, r3, r1, r2 + mov r1, #1 + ldr r2, [r3, #8] + ldr r3, [r3, #12] + str r2, [sp, #68] + mov r2, #0 + str r3, [sp, #72] + bl FlashReadPages + ldr r3, [sp, #60] + cmn r3, #1 + ldr r3, .L2335 + ldreq r2, [r3, #-1636] + addeq r2, r2, #1 + streq r2, [r3, #-1636] + beq .L2314 + ldr r2, [r6, #8] + cmp r2, r5 + beq .L2314 + ldr r2, [r3, #-1636] + ldr r0, .L2335+28 + add r2, r2, #1 + str r2, [r3, #-1636] + mov r2, r5 + ldr r1, [r6, #8] + bl printk + b .L2314 +.L2312: + ldr r1, [r4, #3968] + ldr r2, [r4, #3972] + mla r3, r3, r1, r2 mov r1, #0 - mvn r7, #0 - ldrh r3, [r9, r3] - add r0, r4, #232 - ldrh r8, [r9, r2] - mov r2, #16 - mov r6, #0 - mul r8, r8, r3 + ldr r0, [r3, #8] + movw r3, #3926 + ldrh r2, [r4, r3] bl ftl_memset - ldr r3, [r4, #228] - str r6, [sp, #20] - mov r4, r6 +.L2314: + ldr r3, [sp, #12] + ldr r1, [r4, #3968] + cmp r3, #0 + ldr r2, [r4, #3972] + mov r3, #36 + movweq lr, #3922 + mla r3, r3, r1, r2 + ldreqh r1, [r4, lr] + movne r1, r9 + mov r2, fp, asl #9 + muleq r1, r1, r5 + ldrne r0, [r3, #8] + ldrne r3, [sp, #40] + rsbeq r1, r7, r1 + ldreq r0, [r3, #8] + addne r0, r0, r3, asl #9 + addeq r1, r9, r1, asl #9 + b .L2333 +.L2305: + ldr r3, [sp, #24] + ldr r2, [r4, #3968] + cmp r3, #0 + ldr r3, [r4, #3972] + mla ip, ip, r2, r3 + beq .L2316 + movw lr, #3922 + ldrh r3, [r4, lr] + mul r3, r3, r5 + rsb r3, r7, r3 + add r3, r9, r3, asl #9 + str r3, [ip, #8] + b .L2311 +.L2316: + movw r0, #3922 + movw r3, #3926 + ldrh r1, [r4, r0] + ldrh r2, [r4, r3] + ldr r0, [ip, #8] + mul r1, r1, r5 + rsb r1, r7, r1 + add r1, r9, r1, asl #9 +.L2333: + bl memcpy +.L2311: + ldr r3, .L2335+32 + ldr r0, [sp, #48] + ldr lr, [sp, #44] + strh r3, [r0, lr] @ movhi + ldr r3, .L2335 + str r5, [r6, #8] + add r5, r5, #1 + ldr r2, [r3, #-1800] + str r2, [r6, #4] + add r2, r2, #1 + cmn r2, #1 + str r2, [r3, #-1800] + moveq r2, #0 + streq r2, [r3, #-1800] + ldr r3, [sp, #56] + str r3, [r6, #12] + ldrh r3, [r8, #0] + strh r3, [r6, #2] @ movhi + ldr r3, [r4, #3968] + add r3, r3, #1 + str r3, [r4, #3968] + ldr r3, [sp, #28] + add r3, r3, #1 + str r3, [sp, #28] +.L2302: + ldr r6, [sp, #28] + ldr r3, [sp, #52] + cmp r6, r3 + bne .L2318 +.L2303: + ldr r3, [sp, #20] + mov r6, r8 + ldr lr, [sp, #28] + ldr r2, [r4, #3968] + rsb r3, lr, r3 + str r3, [sp, #20] + ldr r3, .L2335 + ldr r0, [sp, #24] + ldr r3, [r3, #-976] + cmp r2, r3 + orrcs r0, r0, #1 + uxtb r3, r0 + cmp r3, #0 + bne .L2319 + ldrh r2, [r8, #4] + cmp r2, #0 + bne .L2329 +.L2319: + bl FtlCacheWriteBack + ldr lr, [sp, #20] + mov r3, #0 + str r3, [sl, #3968] + cmp lr, #1 + ldr r3, [sp, #24] + movls r3, #0 +.L2329: str r3, [sp, #24] - uxth r8, r8 - add r3, r8, r7 - uxth r3, r3 - str r3, [sp, #4] - b .L2253 -.L2259: - ldr r5, [sp, #4] - sub r3, r8, #12 - mul fp, r8, r4 - ldr sl, .L2261+4 - b .L2254 -.L2257: - add r2, fp, r5 +.L2332: + ldr r3, [sp, #20] + ldr r8, .L2335 + cmp r3, #0 + bne .L2321 + mov r0, r3 + ldr r6, [sp, #36] + ldr r3, [sp, #16] + rsb r1, r3, r6 + bl ftl_do_gc + ldr r3, .L2335+36 + ldrh r3, [r8, r3] + cmp r3, #31 + bhi .L2294 + ldr r2, .L2335+40 + mov r3, #128 + ldr r5, .L2335+4 + mov r4, #16 + strh r3, [r8, r2] @ movhi + sub r2, r2, #2 + strh r3, [r8, r2] @ movhi +.L2322: + mov r0, #0 mov r1, #1 - add r0, sp, #12 - str r3, [sp, #0] - mov r2, r2, asl #10 - str r2, [sp, #16] - mov r2, r1 - bl FlashReadPages - ldr r2, [sp, #12] - ldr r3, [sp, #0] - cmn r2, #1 - beq .L2255 - ldr r2, [sl, #228] - ldrh r1, [r2, #0] - movw r2, #61664 - cmp r1, r2 - bne .L2255 - ldr r0, .L2261+8 - mov r1, r4 - mov r2, r5 - add r6, r6, #1 - bl printk - ldr r3, .L2261+4 - uxth r6, r6 - add r3, r3, r4, asl #1 - strh r5, [r3, #232] @ movhi - b .L2256 -.L2255: - sub r5, r5, #1 - uxth r5, r5 -.L2254: - cmp r5, r3 - bgt .L2257 -.L2256: - ldrb r3, [r9, #3762] @ zero_extendqisi2 - add r4, r4, #1 - cmp r3, r6 - uxtb r4, r4 - moveq r7, #0 -.L2253: - ldrb r3, [r9, #3762] @ zero_extendqisi2 - cmp r3, r4 - bhi .L2259 - mov r0, r7 - add sp, sp, #52 + bl ftl_do_gc + ldr r3, [r5, #4040] + cmp r3, #0 + bne .L2294 + subs r4, r4, #1 + bne .L2322 +.L2294: + mov r0, #0 + add sp, sp, #100 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2262: +.L2336: .align 2 -.L2261: - .word .LANCHOR0 +.L2335: .word .LANCHOR2 - .word .LC140 + .word .LANCHOR0 + .word .LANCHOR2-1996 + .word .LANCHOR1 + .word -1944 + .word .LANCHOR2-1948 + .word -1992 + .word .LC157 + .word -3947 + .word -2000 + .word -1194 .fnend - .size FlashLoadFactorBbt, .-FlashLoadFactorBbt + .size ftl_write.part.24, .-ftl_write.part.24 .align 2 - .global FlashReadFacBbtData - .type FlashReadFacBbtData, %function -FlashReadFacBbtData: + .global ftl_write + .type ftl_write, %function +ftl_write: .fnstart - @ args = 0, pretend = 0, frame = 40 + @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2273 - stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - .save {r4, r5, r6, r7, r8, r9, sl, lr} - mov r6, r1 - mov r9, r2 - movw r1, #3062 - movw r2, #3060 - ldrh r8, [r3, r1] - ldrh r2, [r3, r2] - .pad #40 - sub sp, sp, #40 - ldr r7, .L2273+4 - mov r4, r0 - mul r8, r8, r2 - ldr r3, [r7, #148] - str r3, [sp, #12] - ldr r3, [r7, #228] - uxth r8, r8 - sub r5, r8, #1 - mul sl, r8, r6 - str r3, [sp, #16] - uxth r5, r5 - sub r8, r8, #16 - b .L2264 -.L2270: - mov r1, #1 - add r3, r5, sl - add r0, sp, #4 - mov r2, r1 - mov r3, r3, asl #10 - str r3, [sp, #8] - bl FlashReadPages - ldr r3, [sp, #4] - cmn r3, #1 - beq .L2265 - ldr r3, [r7, #228] - ldrh r2, [r3, #0] - movw r3, #61664 - cmp r2, r3 - bne .L2265 + mov ip, r0 + mov r0, r1 + mov r1, r2 + mov r2, r3 + ldr r3, .L2342 + stmfd sp!, {r4, lr} + .save {r4, lr} + ldr r4, [r3, #4040] cmp r4, #0 - moveq r0, r4 - beq .L2266 - cmp r6, #0 - ldreq r3, .L2273+4 - moveq r0, #1 - beq .L2267 - b .L2268 -.L2269: - ldr r2, [r3, #148] - ubfx r1, r6, #5, #16 - and lr, r6, #31 - add r6, r6, #1 - ldr ip, [r2, r1, asl #2] - uxth r6, r6 - orr ip, ip, r0, asl lr - str ip, [r2, r1, asl #2] -.L2267: - ldr r2, [r3, #156] - cmp r6, r2 - bcc .L2269 -.L2268: - ldr r3, .L2273+4 - mov r2, r9 - mov r0, r4 - ldr r1, [r3, #148] - bl memcpy - mov r2, #4 - ldr r0, .L2273+8 - mov r1, r4 - mov r3, r2 - bl rknand_print_hex - mov r0, #0 - b .L2266 -.L2265: - sub r5, r5, #1 - uxth r5, r5 -.L2264: - cmp r5, r8 - bgt .L2270 + movne r0, #0 + ldmnefd sp!, {r4, pc} + cmp ip, #16 + bne .L2339 + add r0, r0, #256 + ldmfd sp!, {r4, lr} + b FtlVendorPartWrite +.L2339: + ldr r3, [r3, #3956] + add ip, r1, r0 + cmp ip, r3 + bhi .L2341 + ldmfd sp!, {r4, lr} + b ftl_write.part.24 +.L2341: mvn r0, #0 -.L2266: - add sp, sp, #40 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -.L2274: + ldmfd sp!, {r4, pc} +.L2343: .align 2 -.L2273: +.L2342: .word .LANCHOR0 - .word .LANCHOR2 - .word .LC141 .fnend - .size FlashReadFacBbtData, .-FlashReadFacBbtData + .size ftl_write, .-ftl_write .align 2 - .global FlashGetBadBlockList - .type FlashGetBadBlockList, %function -FlashGetBadBlockList: + .global FtlWrite + .type FtlWrite, %function +FtlWrite: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2282 - stmfd sp!, {r4, r5, r6, r7, r8, lr} - .save {r4, r5, r6, r7, r8, lr} - mov r5, r0 - ldr r3, [r3, #3624] - ldr r6, .L2282+4 - ldrb r2, [r3, #13] @ zero_extendqisi2 - ldrh r4, [r3, #14] - ldr r0, [r6, #136] - mul r4, r4, r2 - uxth r4, r4 - add r2, r4, #7 - mov r2, r2, lsr #3 - bl FlashReadFacBbtData - cmn r0, #1 - beq .L2281 - mov r2, #0 - mov r0, r4, lsr #4 - mov r3, r2 - sub r4, r4, #1 - mov r1, #1 - b .L2277 -.L2279: - ldr ip, [r6, #136] - mov r8, r2, lsr #5 - and r7, r2, #31 - ldr ip, [ip, r8, asl #2] - ands ip, ip, r1, asl r7 - movne ip, r3, asl #1 - addne r3, r3, #1 - uxthne r3, r3 - strneh r2, [r5, ip] @ movhi - cmp r3, r0 - bcs .L2281 - add r2, r2, #1 - uxth r2, r2 -.L2277: - cmp r2, r4 - blt .L2279 - b .L2276 -.L2281: - mov r3, #0 -.L2276: - mov r3, r3, asl #1 - mvn r2, #0 - mov r0, #0 - strh r2, [r5, r3] @ movhi - ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L2283: + @ link register save eliminated. + b ftl_write + .fnend + .size FtlWrite, .-FtlWrite .align 2 -.L2282: - .word .LANCHOR0 - .word .LANCHOR2 + .global ftl_sys_write + .type ftl_sys_write, %function +ftl_sys_write: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + mov ip, r1 + mov r3, r2 + add r1, r0, #256 + mov r2, ip + mov r0, #16 + b ftl_write .fnend - .size FlashGetBadBlockList, .-FlashGetBadBlockList + .size ftl_sys_write, .-ftl_sys_write .align 2 - .global FtlMakeBbt - .type FtlMakeBbt, %function -FtlMakeBbt: + .global StorageSysDataStore + .type StorageSysDataStore, %function +StorageSysDataStore: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - ldr r4, .L2302 - ldr r5, [r4, #-2088] - cmp r5, #0 - bne .L2285 - ldr r7, .L2302+4 - bl FtlBbtMemInit - ldr r6, .L2302+8 - bl FtlLoadFactoryBbt - add sl, r7, #12 - b .L2286 -.L2292: - ldrh r3, [sl], #2 - movw r2, #65535 - ldr r0, [r4, #-960] - movw fp, #3912 - ldr r9, [r4, #-936] - cmp r3, r2 - str r0, [r4, #188] - str r9, [r4, #192] - beq .L2287 - ldrh r8, [r6, fp] - mov r1, #1 - mov r2, r1 - ldr r0, .L2302+12 - mla r8, r8, r5, r3 - mov r3, r8, asl #10 - str r3, [r4, #184] - bl FlashReadPages - ldrh r2, [r6, fp] - ldr r0, [r7, #28] - add r2, r2, #7 - ldr r1, [r4, #188] - mov r2, r2, lsr #3 - bl memcpy - b .L2288 -.L2287: - mov r1, r5 - bl FlashGetBadBlockList - ldr r0, [r4, #188] - ldr r1, [r7, #28] - bl FtlBbt2Bitmap - ldrh fp, [r6, fp] -.L2290: - sub fp, fp, #1 - uxth fp, fp -.L2301: - movw r8, #3912 - ldrh r0, [r6, r8] - mla r0, r0, r5, fp - uxth r0, r0 - bl FtlBbmIsBadBlock - cmp r0, #1 - beq .L2290 - mov r1, #0 - mov r2, #16 - strh fp, [sl, #-2] @ movhi - ldr r0, [r4, #-936] - bl ftl_memset - ldr r3, .L2302+16 - strh r3, [r9, #0] @ movhi - mov r3, #0 - str r3, [r9, #4] - ldrh r3, [sl, #-2] - ldrh r8, [r6, r8] - strh r3, [r9, #2] @ movhi - ldrh r3, [sl, #-2] - ldr r1, [r7, #28] - ldr r0, [r4, #188] - mla r8, r8, r5, r3 - mov r3, r8, asl #10 - str r3, [r4, #184] - ldr r3, .L2302+20 - ldrh r2, [r4, r3] - mov r2, r2, asl #2 - bl memcpy - mov r1, #1 - mov r2, r1 - ldr r0, .L2302+12 - bl FlashEraseBlocks + stmfd sp!, {r3, r4, r5, lr} + .save {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + bl rknand_device_lock + mov r2, r4 mov r1, #1 - mov r3, r1 - ldr r0, .L2302+12 - mov r2, r1 - bl FlashProgPages - ldr r3, [r4, #180] - cmn r3, #1 - bne .L2288 - uxth r0, r8 - bl FtlBbmMapBadBlock - b .L2301 -.L2288: - uxth r0, r8 - add r5, r5, #1 - bl FtlBbmMapBadBlock - add r7, r7, #4 -.L2286: - movw r3, #3870 - ldrh r3, [r6, r3] - cmp r5, r3 - bcc .L2292 - mov r4, #0 - ldr r7, .L2302+8 - movw r6, #3930 - b .L2293 -.L2294: - mov r0, r4 - add r4, r4, #1 - bl FtlBbmMapBadBlock - uxth r4, r4 -.L2293: - ldrh r3, [r7, r6] - ldr r5, .L2302+8 - cmp r3, r4 - bhi .L2294 - movw r7, #3992 - movw r6, #3980 - ldrh r4, [r5, r7] - sub r4, r4, #1 - uxth r4, r4 - b .L2295 -.L2300: - mov r0, r4 - bl FtlBbmIsBadBlock - cmp r0, #1 - beq .L2296 - mov r0, r4 - bl FlashTestBlk - cmp r0, #0 - beq .L2297 + mov r0, r5 + bl ftl_sys_write + mov r4, r0 + bl rknand_device_unlock mov r0, r4 - bl FtlBbmMapBadBlock - b .L2296 -.L2297: - ldrh r2, [r5, r6] - movw r3, #65535 - cmp r2, r3 - streqh r4, [r5, r6] @ movhi -.L2298: - ldrne r2, .L2302+8 - movne r3, #3984 - strneh r4, [r2, r3] @ movhi - bne .L2299 -.L2296: - sub r4, r4, #1 - uxth r4, r4 -.L2295: - ldrh r3, [r5, r7] - sub r3, r3, #48 - cmp r4, r3 - bgt .L2300 -.L2299: - ldr r4, .L2302+8 - movw r6, #3980 - ldr r3, .L2302 - mov r5, #3984 - mov r7, #0 - movw r8, #3982 - str r7, [r4, #3988] - mov r2, #2 - ldr r0, [r3, #-2084] - mov r1, #1 - ldrh r3, [r4, r6] - strh r7, [r4, r8] @ movhi - mov r3, r3, asl #10 - str r3, [r0, #4] - ldrh r3, [r4, r5] - mov r3, r3, asl #10 - str r3, [r0, #40] - bl FlashEraseBlocks - ldrh r0, [r4, r6] - bl FtlBbmMapBadBlock - ldrh r0, [r4, r5] - bl FtlBbmMapBadBlock - bl FtlBbmTblFlush - ldr r3, [r4, #3988] - ldrh r2, [r4, r5] - add r3, r3, #1 - str r3, [r4, #3988] - ldrh r3, [r4, r6] - strh r7, [r4, r8] @ movhi - strh r2, [r4, r6] @ movhi - strh r3, [r4, r5] @ movhi - bl FtlBbmTblFlush -.L2285: - mov r0, #0 - ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2303: + ldmfd sp!, {r3, r4, r5, pc} + .fnend + .size StorageSysDataStore, .-StorageSysDataStore .align 2 -.L2302: - .word .LANCHOR2 - .word .LANCHOR0+3980 - .word .LANCHOR0 - .word .LANCHOR2+180 - .word -3872 - .word -1028 + .global ftl_vendor_write + .type ftl_vendor_write, %function +ftl_vendor_write: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + mov ip, r1 + mov r3, r2 + stmfd sp!, {r4, lr} + .save {r4, lr} + mov r4, r0 + mov r1, r4 + mov r0, #16 + mov r2, ip + ldmfd sp!, {r4, lr} + b ftl_write .fnend - .size FtlMakeBbt, .-FtlMakeBbt + .size ftl_vendor_write, .-ftl_vendor_write .align 2 - .type FtlLowFormat.part.24, %function -FtlLowFormat.part.24: + .global FlashBootVendorWrite + .type FlashBootVendorWrite, %function +FlashBootVendorWrite: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - mov r6, #3952 - ldr r5, .L2325 - mov r1, #0 - ldr r4, .L2325+4 - ldrh r2, [r5, r6] - ldr r0, [r4, #-900] - mov r2, r2, asl #2 - bl ftl_memset - ldrh r2, [r5, r6] - mov r1, #0 - ldr r0, [r4, #-1032] - mov r2, r2, asl #2 - bl ftl_memset - ldr r0, [r5, #3852] - mov r3, #0 - str r3, [r4, #-1804] - str r3, [r4, #-1800] - uxth r0, r0 - bl FtlFreeSysBlkQueueInit - bl FtlLoadBbt - cmp r0, #0 - beq .L2305 - bl FtlMakeBbt -.L2305: - mov r3, #0 - ldr ip, .L2325 - movw r0, #3922 - ldr r2, .L2325+4 - ldr r1, .L2325+8 - b .L2306 -.L2307: - ldr lr, [r2, #-944] - mvn r4, r3 - orr r4, r3, r4, asl #16 - str r4, [lr, r3, asl #2] - ldr lr, [r2, #-940] - str r1, [lr, r3, asl #2] - add r3, r3, #1 - uxth r3, r3 -.L2306: - ldrh lr, [ip, r0] - ldr r8, .L2325 - cmp r3, lr, asl #7 - blt .L2307 - mov r3, #3856 - mov r5, #0 - ldrh r6, [r8, r3] - movw r7, #3858 - b .L2308 -.L2309: + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl rknand_device_lock + mov r2, r4 + mov r1, r5 mov r0, r6 - mov r1, #1 - bl FtlLowFormatEraseBlock - add r6, r6, #1 - uxth r6, r6 - add r5, r5, r0 - uxth r5, r5 -.L2308: - ldrh r3, [r8, r7] - ldr r4, .L2325 - cmp r3, r6 - bhi .L2309 - movw r3, #3848 - ldrh r1, [r4, r3] - sub r3, r5, #3 - cmp r3, r1, asl #1 - blt .L2310 - mov r0, r5 - movw r6, #3858 + bl ftl_vendor_write + mov r4, r0 + bl rknand_device_unlock + mov r0, r4 + ldmfd sp!, {r4, r5, r6, pc} + .fnend + .size FlashBootVendorWrite, .-FlashBootVendorWrite + .align 2 + .global ftl_read + .type ftl_read, %function +ftl_read: + .fnstart + @ args = 0, pretend = 0, frame = 64 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} + cmp r0, #16 + .pad #68 + sub sp, sp, #68 + mov r4, r1 + mov r8, r3 + str r2, [sp, #28] + bne .L2350 + add r0, r1, #256 + mov r1, r2 + mov r2, r3 + bl FtlVendorPartRead + str r0, [sp, #16] + b .L2351 +.L2350: + ldr r3, [sp, #28] + add r3, r3, r1 + str r3, [sp, #20] + ldr r3, .L2380 + ldr r1, [sp, #20] + ldr r2, [r3, #3956] + cmp r1, r2 + mvnhi r3, #0 + strhi r3, [sp, #16] + bhi .L2351 + movw r2, #3922 + mov r0, r4 + ldrh r5, [r3, r2] + mov r1, r5 bl __aeabi_uidiv - ldr r3, [r4, #3948] - add r0, r0, r3 - uxth r0, r0 - bl FtlSysBlkNumInit - ldr r0, [r4, #3852] - uxth r0, r0 - bl FtlFreeSysBlkQueueInit - mov r3, #3856 - ldrh r5, [r4, r3] - b .L2311 -.L2312: - mov r0, r5 - mov r1, #1 - bl FtlLowFormatEraseBlock - add r5, r5, #1 - uxth r5, r5 -.L2311: - ldrh r3, [r4, r6] - cmp r3, r5 - bhi .L2312 -.L2310: - mov r4, #0 - ldr r8, .L2325 - mov r6, r4 - mov r7, #3856 - b .L2313 -.L2314: + ldr r3, [sp, #20] + mov r1, r5 + str r0, [sp, #12] + sub r0, r3, #1 + bl __aeabi_uidiv + ldr r1, [sp, #12] + rsb r3, r1, #1 + ldr r1, [sp, #28] + add r3, r3, r0 + str r3, [sp, #8] + ldr r3, .L2380+4 + mov fp, r0 + ldr r0, [sp, #12] + ldr r2, [r3, #-1808] + add r2, r1, r2 + ldr r1, [sp, #8] + str r2, [r3, #-1808] + ldr r2, [r3, #-1836] + add r2, r1, r2 + mov r1, fp + str r2, [r3, #-1836] + bl FtlCacheMetchLpa + cmp r0, #0 + beq .L2352 + bl FtlCacheWriteBack +.L2352: + mov r9, #0 + ldr r6, [sp, #12] + str r9, [sp, #32] + mov r5, r9 + str r9, [sp, #16] + ldr r7, .L2380 + b .L2375 +.L2369: + mov r2, #0 mov r0, r6 + add r1, sp, #60 + bl log2phys + ldr r2, [sp, #60] + cmn r2, #1 + bne .L2376 + b .L2379 +.L2357: + mla r0, r0, r6, sl + cmp r0, r4 + bcc .L2356 + ldr r2, [sp, #20] + cmp r0, r2 + bcs .L2356 + rsb r0, r4, r0 mov r1, #0 - bl FtlLowFormatEraseBlock + mov r2, #512 + str r3, [sp, #4] + add r0, r8, r0, asl #9 + bl ftl_memset + ldr r3, [sp, #4] +.L2356: + add sl, sl, #1 + b .L2354 +.L2379: + mov sl, #0 + movw r3, #3922 +.L2354: + ldrh r0, [r7, r3] + cmp sl, r0 + bcc .L2357 + b .L2358 +.L2376: + ldr r3, .L2380+4 + mov sl, #36 + ldr r1, [r3, #-972] + mla sl, sl, r5, r1 + ldr r1, [sp, #12] + cmp r6, r1 + str r2, [sl, #4] + movw r2, #3922 + bne .L2359 + ldr r3, [r3, #-944] + mov r0, r4 + str r3, [sl, #8] + ldrh r3, [r7, r2] + mov r1, r3 + str r3, [sp, #4] + bl __aeabi_uidivmod + ldr r3, [sp, #4] + str r1, [sp, #36] + rsb r2, r1, r3 + ldr r1, [sp, #28] + cmp r2, r1 + movcc r1, r2 + str r1, [sp, #32] + cmp r1, r3 + streq r8, [sl, #8] + b .L2360 +.L2359: + cmp r6, fp + ldrneh r3, [r7, r2] + mulne r3, r3, r6 + bne .L2377 + ldr r3, [r3, #-940] + ldrh r2, [r7, r2] + ldr r1, [sp, #20] + str r3, [sl, #8] + mul r3, r2, r6 + rsb r9, r3, r1 + cmp r9, r2 + bne .L2360 +.L2377: + rsb r3, r4, r3 + add r3, r8, r3, asl #9 + str r3, [sl, #8] +.L2360: + movw r3, #3928 + ldr r2, .L2380+4 + ldrh r3, [r7, r3] + str r6, [sl, #16] + ldr r2, [r2, #-932] + mul r3, r3, r5 + add r5, r5, #1 + bic r3, r3, #3 + add r3, r2, r3 + str r3, [sl, #12] +.L2358: + ldr r3, [sp, #8] add r6, r6, #1 - uxth r6, r6 - add r4, r4, r0 - uxth r4, r4 -.L2313: - ldrh r3, [r8, r7] - ldr r5, .L2325 + subs r3, r3, #1 + str r3, [sp, #8] + beq .L2362 + movw r3, #3848 + ldrh r3, [r7, r3] + cmp r5, r3, asl #3 + bne .L2375 +.L2362: + cmp r5, #0 + beq .L2375 + ldr sl, .L2380+4 + mov r1, r5 + mov r2, #0 + ldr r0, [sl, #-972] + bl FlashReadPages + ldr r3, [sp, #36] + str r6, [sp, #52] + mov r6, r5 + mov r3, r3, asl #9 + str r3, [sp, #40] + ldr r3, [sp, #32] + mov r3, r3, asl #9 + str r3, [sp, #44] + mov r3, r9, asl #9 + str r3, [sp, #48] + mov r3, #0 + str r3, [sp, #24] +.L2368: + ldr r3, [sp, #24] + mov r5, #36 + ldr r1, [sp, #12] + mul r5, r5, r3 + ldr r3, [sl, #-972] + add r3, r3, r5 + ldr r2, [r3, #16] + cmp r2, r1 + bne .L2364 + ldr r1, [r3, #8] + ldr r3, [sl, #-944] + cmp r1, r3 + bne .L2365 + ldr r3, [sp, #40] + mov r0, r8 + ldr r2, [sp, #44] + add r1, r1, r3 + b .L2378 +.L2364: + cmp r2, fp + bne .L2365 + ldr r1, [r3, #8] + ldr r3, [sl, #-940] + cmp r1, r3 + bne .L2365 + movw r2, #3922 + ldrh r0, [r7, r2] + ldr r2, [sp, #48] + mul r0, r0, fp + rsb r0, r4, r0 + add r0, r8, r0, asl #9 +.L2378: + bl memcpy +.L2365: + ldr r3, [sl, #-972] + add r0, r3, r5 + ldr r2, [r3, r5] + cmn r2, #1 + streq r2, [sp, #16] + ldreq r1, [sl, #-1636] + addeq r1, r1, #1 + streq r1, [sl, #-1636] + ldr r3, [r3, r5] + cmp r3, #256 + bne .L2367 + ldr r0, [r0, #4] + ubfx r0, r0, #10, #16 + bl P2V_block_in_plane + bl FtlGcRefreshBlock +.L2367: + ldr r3, [sp, #24] + add r3, r3, #1 + str r3, [sp, #24] cmp r3, r6 - bhi .L2314 - movw r3, #3858 - ldr r8, .L2325+4 - ldrh r3, [r5, r3] - ldr fp, [r5, #3860] - ldr r9, .L2325+12 - str r3, [r8, #-984] - movw r3, #3848 - ldrh r6, [r5, r3] - mov r0, fp - mov r1, r6 - bl __aeabi_uidiv - ubfx sl, r0, #5, #16 - mov r7, r0 - add r3, sl, #36 - strh r3, [r8, r9] @ movhi - mov r3, #24 - str r0, [r5, #3976] - mul r3, r3, r6 - cmp r4, r3 - ble .L2315 - rsb r0, r4, fp - mov r1, r6 - bl __aeabi_uidiv - str r0, [r5, #3976] - mov r0, r0, lsr #5 - add r0, r0, #24 - strh r0, [r8, r9] @ movhi -.L2315: - ldr r3, .L2325 - ldr r3, [r3, #3840] - cmp r3, #1 - bne .L2316 - mov r0, r4 - mov r1, r6 - bl __aeabi_uidiv - ldr r8, .L2325+4 - ldr r5, .L2325+12 - ldrh r9, [r8, r5] - uxtah r0, r9, r0 - add r9, r9, r0, lsr #2 - strh r9, [r8, r5] @ movhi -.L2316: - ldr r3, .L2325 - ldrb r3, [r3, #928] @ zero_extendqisi2 + bne .L2368 + ldr r6, [sp, #52] + mov r5, #0 +.L2375: + ldr r3, [sp, #8] cmp r3, #0 - beq .L2317 - mov r0, r4 - mov r1, r6 - bl __aeabi_uidiv - ldr r8, .L2325+4 - ldr r5, .L2325+12 - ldrh r9, [r8, r5] - uxtah r0, r9, r0 - add r9, r9, r0, lsr #2 - strh r9, [r8, r5] @ movhi -.L2317: - ldr r0, .L2325 - movw r3, #3908 - ldrh r3, [r0, r3] + bne .L2369 + ldr r3, .L2380+8 + ldr r2, .L2380+4 + ldrh r3, [r2, r3] cmp r3, #0 - beq .L2318 - ldr r1, .L2325+4 - ldr r2, .L2325+12 - ldrh ip, [r1, r2] - add ip, ip, r3, lsr #1 - strh ip, [r1, r2] @ movhi - mul ip, r6, r3 - cmp ip, r4 - strgt r7, [r0, #3976] - addgt r3, r3, #32 - addgt sl, sl, r3 - strgth sl, [r1, r2] @ movhi -.L2318: - ldr r4, .L2325+4 - ldr r5, .L2325 - ldr r3, .L2325+12 - ldr r7, .L2325+16 - ldr r2, [r5, #3976] - ldrh r3, [r4, r3] - rsb r3, r3, r2 - mul r6, r6, r3 - movw r3, #3916 - ldrh r3, [r5, r3] - str r6, [r4, #216] - mul r6, r3, r6 - movw r3, #3922 - ldrh r3, [r5, r3] - str r6, [r5, #3976] - mul r6, r3, r6 - str r6, [r5, #3956] - mvn r6, #0 - bl FtlBbmTblFlush - movw r3, #3858 - ldrh r2, [r5, r3] + beq .L2351 + ldr r0, [sp, #8] + mov r1, #1 + bl ftl_do_gc +.L2351: + ldr r0, [sp, #16] + add sp, sp, #68 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +.L2381: + .align 2 +.L2380: + .word .LANCHOR0 + .word .LANCHOR2 + .word -1138 + .fnend + .size ftl_read, .-ftl_read + .align 2 + .global FtlRead + .type FtlRead, %function +FtlRead: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + b ftl_read + .fnend + .size FtlRead, .-FtlRead + .align 2 + .global ftl_sys_read + .type ftl_sys_read, %function +ftl_sys_read: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + mov ip, r1 + mov r3, r2 + add r1, r0, #256 + mov r2, ip + mov r0, #16 + b ftl_read + .fnend + .size ftl_sys_read, .-ftl_sys_read + .align 2 + .global StorageSysDataLoad + .type StorageSysDataLoad, %function +StorageSysDataLoad: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r3, r4, r5, lr} + .save {r3, r4, r5, lr} + mov r2, #512 + mov r5, r0 + mov r4, r1 + mov r0, r1 mov r1, #0 - ldr r0, [r4, #-2016] - mov r2, r2, asl #1 - bl ftl_memset - ldr r1, .L2325+20 - mov r3, #0 - ldr r2, .L2325+24 - str r3, [r4, #-1844] - strh r3, [r4, r1] @ movhi - sub r1, r1, #236 - strb r3, [r4, #-1754] - strh r3, [r4, r1] @ movhi - mov r1, #255 - strb r3, [r4, #-1752] - strb r3, [r4, #-1990] - strh r3, [r4, r7] @ movhi - mov r3, #1 - strb r3, [r4, #-1988] - mov r3, #3856 - strh r6, [r4, r2] @ movhi - ldrh r2, [r5, r3] - ldr r0, [r4, #-1840] - mov r2, r2, lsr #3 bl ftl_memset -.L2319: - ldr r0, .L2325+28 - bl make_superblock - ldrb r3, [r4, #-1989] @ zero_extendqisi2 - ldr r5, .L2325+4 - cmp r3, #0 - ldr r3, .L2325+16 - bne .L2320 - ldrh r3, [r4, r7] - ldr r2, [r4, #-2016] - mov r3, r3, asl #1 - strh r6, [r2, r3] @ movhi - ldrh r3, [r4, r7] - add r3, r3, #1 - strh r3, [r4, r7] @ movhi - b .L2319 -.L2320: - ldr r2, [r5, #-1804] - mvn r7, #0 - ldr r1, [r5, #-2016] - ldr r6, .L2325+32 - str r2, [r5, #-1984] - add r2, r2, #1 - str r2, [r5, #-1804] - ldr r2, .L2325+36 - ldrh r0, [r5, r2] - ldrh r2, [r5, r3] - mov r2, r2, asl #1 - strh r0, [r1, r2] @ movhi - mov r2, #0 - ldr r0, .L2325+40 - ldrh r3, [r5, r3] - strb r2, [r5, #-1942] - add r3, r3, #1 - strh r2, [r5, r0] @ movhi - strh r3, [r5, r6] @ movhi - mov r3, #1 - strb r3, [r5, #-1940] -.L2321: - ldr r0, .L2325+44 - bl make_superblock - ldrb r3, [r5, #-1941] @ zero_extendqisi2 - ldr r4, .L2325+4 - cmp r3, #0 - bne .L2322 - ldrh r3, [r5, r6] - ldr r2, [r5, #-2016] - mov r3, r3, asl #1 - strh r7, [r2, r3] @ movhi - ldrh r3, [r5, r6] - add r3, r3, #1 - strh r3, [r5, r6] @ movhi - b .L2321 -.L2322: - ldr r3, [r4, #-1804] - mvn r5, #0 - ldr r2, [r4, #-2016] - str r3, [r4, #-1936] - add r3, r3, #1 - str r3, [r4, #-1804] - ldr r3, .L2325+48 - ldrh r1, [r4, r3] - sub r3, r3, #4 - ldrh r3, [r4, r3] - mov r3, r3, asl #1 - strh r1, [r2, r3] @ movhi - ldr r3, .L2325+52 - strh r5, [r4, r3] @ movhi - bl FtlFreeSysBlkQueueOut - ldr r3, .L2325+56 - mov r2, #0 - strh r0, [r4, r3] @ movhi - add r3, r3, #2 - strh r2, [r4, r3] @ movhi - add r3, r3, #2 - ldr r2, [r4, #216] - strh r5, [r4, r3] @ movhi - add r3, r3, #2 - strh r2, [r4, r3] @ movhi - ldr r3, [r4, #-1804] - str r3, [r4, #-1764] - add r3, r3, #1 - str r3, [r4, #-1804] - bl FtlVpcTblFlush - bl FtlSysBlkInit - cmp r0, #0 - ldmnefd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - ldr r3, .L2325+60 - mov r2, #1 - str r2, [r3, #2996] - ldmfd sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2326: + bl rknand_device_lock + mov r2, r4 + mov r1, #1 + mov r0, r5 + bl ftl_sys_read + mov r4, r0 + bl rknand_device_unlock + mov r0, r4 + ldmfd sp!, {r3, r4, r5, pc} + .fnend + .size StorageSysDataLoad, .-StorageSysDataLoad + .align 2 + .global ftl_vendor_read + .type ftl_vendor_read, %function +ftl_vendor_read: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + mov ip, r1 + mov r3, r2 + stmfd sp!, {r4, lr} + .save {r4, lr} + mov r4, r0 + mov r1, r4 + mov r0, #16 + mov r2, ip + ldmfd sp!, {r4, lr} + b ftl_read + .fnend + .size ftl_vendor_read, .-ftl_vendor_read .align 2 -.L2325: - .word .LANCHOR0 - .word .LANCHOR2 - .word 168778952 - .word -1776 - .word -1996 - .word -1758 - .word -1760 - .word .LANCHOR2-1996 - .word -1948 - .word -1992 - .word -1946 - .word .LANCHOR2-1948 - .word -1944 - .word -1900 - .word -1772 - .word .LANCHOR1 + .global FlashBootVendorRead + .type FlashBootVendorRead, %function +FlashBootVendorRead: + .fnstart + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl rknand_device_lock + mov r2, r4 + mov r1, r5 + mov r0, r6 + bl ftl_vendor_read + mov r4, r0 + bl rknand_device_unlock + mov r0, r4 + ldmfd sp!, {r4, r5, r6, pc} .fnend - .size FtlLowFormat.part.24, .-FtlLowFormat.part.24 + .size FlashBootVendorRead, .-FlashBootVendorRead .align 2 - .global FtlLowFormat - .type FtlLowFormat, %function -FtlLowFormat: + .type rk_ftl_vendor_ops.constprop.28, %function +rk_ftl_vendor_ops.constprop.28: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, lr} - .save {r3, lr} - ldr r3, .L2329 - ldr r3, [r3, #-2088] - cmp r3, #0 - bne .L2328 - bl FtlLowFormat.part.24 -.L2328: - mov r0, #0 - ldmfd sp!, {r3, pc} -.L2330: + @ link register save eliminated. + cmp r2, #0 + mov r3, r0 + mov r2, r3 + mov r0, r1 + mov r1, #128 + beq .L2388 + b FlashBootVendorWrite +.L2388: + b FlashBootVendorRead + .fnend + .size rk_ftl_vendor_ops.constprop.28, .-rk_ftl_vendor_ops.constprop.28 .align 2 -.L2329: + .global FtlCheckVpc + .type FtlCheckVpc, %function +FtlCheckVpc: + .fnstart + @ args = 0, pretend = 0, frame = 8 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r0, r1, r2, r4, r5, r6, r7, r8, sl, lr} + .save {r0, r1, r2, r4, r5, r6, r7, r8, sl, lr} + mov r4, #0 + ldr r1, .L2400 + ldr r0, .L2400+4 + bl printk + ldr r0, .L2400+8 + mov r1, #8192 + ldr r6, .L2400+12 + bl __memzero + ldr r5, .L2400+16 + b .L2390 +.L2392: + mov r0, r4 + add r1, sp, #4 + mov r2, #0 + bl log2phys + ldr r0, [sp, #4] + cmn r0, #1 + beq .L2391 + ubfx r0, r0, #10, #16 + bl P2V_block_in_plane + add r0, r5, r0, asl #1 + add r0, r0, #460 + ldrh r3, [r0, #0] + add r3, r3, #1 + strh r3, [r0, #0] @ movhi +.L2391: + add r4, r4, #1 +.L2390: + ldr r3, [r6, #3976] + ldr r7, .L2400+12 + cmp r4, r3 + bcc .L2392 + ldr r5, .L2400+16 + mov r6, #3856 + ldr r0, .L2400+20 + mov r2, #2 + ldrh r3, [r7, r6] + mov r4, #0 + ldr r1, [r5, #-2016] + bl rknand_print_hex + ldr r0, .L2400+24 + add r1, r5, #460 + mov r2, #2 + ldrh r3, [r7, r6] + bl rknand_print_hex + b .L2393 +.L2395: + ldr r2, [r5, #-2016] + mov r3, r4, asl #1 + ldrh r2, [r2, r3] + add r3, r5, r3 + add r3, r3, #460 + ldrh r3, [r3, #0] + cmp r2, r3 + beq .L2394 + ldr r0, .L2400+28 + mov r1, r4 + bl printk +.L2394: + add r4, r4, #1 + uxth r4, r4 +.L2393: + ldrh r3, [r7, r6] + cmp r3, r4 + ldr r3, .L2400+16 + bhi .L2395 + ldr r2, [r3, #-2004] + cmp r2, #0 + beq .L2389 + ldr r4, [r3, #-2024] + mov r6, #0 + ldr r1, .L2400+32 + mov r5, r3 + rsb r2, r4, r2 + ldr r4, .L2400+36 + mov r8, #6 + movw sl, #65535 + mov r2, r2, asr #1 + ldrh r7, [r3, r1] + mul r4, r4, r2 + uxth r4, r4 + b .L2397 +.L2399: + ldr r2, [r5, #-2016] + mov r3, r4, asl #1 + ldrh r2, [r2, r3] + cmp r2, #0 + beq .L2398 + add r3, r5, r3 + ldr r0, .L2400+40 + add r3, r3, #460 + mov r1, r4 + ldrh r3, [r3, #0] + bl printk +.L2398: + mul r4, r8, r4 + ldr r3, [r5, #-2024] + ldrh r4, [r3, r4] + cmp r4, sl + beq .L2389 + add r6, r6, #1 + uxth r6, r6 +.L2397: + cmp r6, r7 + bne .L2399 +.L2389: + ldmfd sp!, {r1, r2, r3, r4, r5, r6, r7, r8, sl, pc} +.L2401: + .align 2 +.L2400: + .word .LANCHOR3+77 + .word .LC101 + .word .LANCHOR2+460 + .word .LANCHOR0 .word .LANCHOR2 + .word .LC158 + .word .LC159 + .word .LC160 + .word -2000 + .word -1431655765 + .word .LC161 .fnend - .size FtlLowFormat, .-FtlLowFormat + .size FtlCheckVpc, .-FtlCheckVpc .align 2 .global HynixGetReadRetryDefault .type HynixGetReadRetryDefault, %function @@ -20657,7 +21519,7 @@ HynixGetReadRetryDefault: .fnstart @ args = 0, pretend = 0, frame = 64 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2416 + ldr r3, .L2487 mvn r2, #83 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} @@ -20673,16 +21535,16 @@ HynixGetReadRetryDefault: strb r0, [r3, #5] strb r1, [r3, #6] strb r2, [r3, #7] - bne .L2332 + bne .L2403 mvn r2, #88 strb r2, [r3, #4] - ldr r3, .L2416+4 + ldr r3, .L2487+4 mvn r2, #8 strb r2, [r3, #3025] - b .L2388 -.L2332: + b .L2459 +.L2403: cmp r4, #3 - bne .L2334 + bne .L2405 mvn r2, #79 strb r2, [r3, #4] mvn r2, #78 @@ -20698,10 +21560,10 @@ HynixGetReadRetryDefault: mvn r2, #73 strb r2, [r3, #10] mvn r2, #72 - b .L2411 -.L2334: + b .L2482 +.L2405: cmp r4, #4 - bne .L2335 + bne .L2406 mvn ip, #51 strb r0, [r3, #9] strb ip, [r3, #4] @@ -20714,14 +21576,14 @@ HynixGetReadRetryDefault: strb ip, [r3, #7] mvn ip, #50 strb ip, [r3, #8] -.L2411: +.L2482: mov r6, #8 strb r2, [r3, #11] mov r5, r6 - b .L2333 -.L2335: + b .L2404 +.L2406: cmp r4, #5 - bne .L2336 + bne .L2407 mov r2, #56 mov r6, #8 strb r2, [r3, #4] @@ -20731,10 +21593,10 @@ HynixGetReadRetryDefault: strb r2, [r3, #6] mov r2, #59 strb r2, [r3, #7] - b .L2410 -.L2336: + b .L2481 +.L2407: cmp r4, #6 - bne .L2337 + bne .L2408 mov r2, #14 mov r6, #12 strb r2, [r3, #4] @@ -20744,10 +21606,10 @@ HynixGetReadRetryDefault: strb r2, [r3, #6] mov r2, #17 strb r2, [r3, #7] - b .L2410 -.L2337: + b .L2481 +.L2408: cmp r4, #7 - bne .L2388 + bne .L2459 mvn r2, #79 mov r6, #12 strb r2, [r3, #4] @@ -20770,17 +21632,17 @@ HynixGetReadRetryDefault: strb r2, [r3, #12] mvn r2, #42 strb r2, [r3, #13] - b .L2333 -.L2388: + b .L2404 +.L2459: mov r6, #7 -.L2410: +.L2481: mov r5, #4 -.L2333: +.L2404: sub r3, r4, #1 cmp r3, #1 - bhi .L2406 - b .L2414 -.L2344: + bhi .L2477 + b .L2485 +.L2415: add r2, fp, r8 add r4, fp, #20 mov r7, #0 @@ -20792,7 +21654,7 @@ HynixGetReadRetryDefault: ldr r1, [r2, #864] add sl, sl, #8 add sl, r1, sl, asl #8 -.L2340: +.L2411: add r2, fp, r7 str r5, [sl, #8] mov r0, #80 @@ -20806,26 +21668,26 @@ HynixGetReadRetryDefault: ldr r3, [sp, #12] uxtb r2, r7 cmp r2, r6 - bcc .L2340 + bcc .L2411 mov r2, #0 - b .L2341 -.L2342: + b .L2412 +.L2413: ldrb r7, [r0, r1, asl #2] @ zero_extendqisi2 ldrb r5, [r4, r2] @ zero_extendqisi2 add r5, r7, r5 strb r5, [ip, r1, asl #3] add r1, r1, #1 cmp r1, #7 - bne .L2342 + bne .L2413 add r2, r2, #1 cmp r2, #4 - beq .L2343 -.L2341: + beq .L2414 +.L2412: mov r1, #1 add ip, r4, r2 add r0, r2, r9 - b .L2342 -.L2343: + b .L2413 +.L2414: add r8, r8, #1 mov r2, #0 strb r2, [r4, #16] @@ -20836,24 +21698,24 @@ HynixGetReadRetryDefault: strb r2, [r4, #48] strb r2, [r4, #41] strb r2, [r4, #49] - b .L2338 -.L2414: - ldr r9, .L2416+8 + b .L2409 +.L2485: + ldr r9, .L2487+8 mov r3, r6 mov r8, #0 mov r6, r5 -.L2338: - ldr fp, .L2416 +.L2409: + ldr fp, .L2487 ldrb r2, [fp, #3762] @ zero_extendqisi2 cmp r2, r8 - bhi .L2344 + bhi .L2415 mov r5, r6 mov r6, r3 - b .L2345 -.L2406: + b .L2416 +.L2477: sub r3, r4, #3 cmp r3, #4 - bhi .L2345 + bhi .L2416 mul r3, r6, r5 mov sl, #0 mov r7, sl @@ -20862,8 +21724,8 @@ HynixGetReadRetryDefault: mov r3, r3, asl #4 str r2, [sp, #24] str r3, [sp, #52] - b .L2346 -.L2387: + b .L2417 +.L2458: add r3, r1, sl ldrb r6, [r3, #3764] @ zero_extendqisi2 add r3, r1, r6, asl #3 @@ -20888,30 +21750,30 @@ HynixGetReadRetryDefault: cmp r4, #4 mov r3, #54 str r3, [r8, #8] - bne .L2349 + bne .L2420 mov r3, #255 str r3, [r8, #4] mov r3, #64 str r3, [r9, fp, asl #8] mov r3, #204 - b .L2412 -.L2349: + b .L2483 +.L2420: sub r3, r4, #5 cmp r3, #1 - ldrls r3, .L2416 + ldrls r3, .L2487 ldrlsb r3, [r3, #4] @ zero_extendqisi2 strls r3, [r8, #4] movls r3, #82 - bls .L2413 -.L2351: + bls .L2484 +.L2422: mov r3, #174 str r3, [r8, #4] mov r3, #176 str r7, [r9, fp, asl #8] -.L2412: +.L2483: str r3, [r8, #4] mov r3, #77 -.L2413: +.L2484: cmp r4, #6 str r3, [r9, fp, asl #8] mov r0, r6 @@ -20939,77 +21801,77 @@ HynixGetReadRetryDefault: cmp r3, #1 str r3, [sp, #36] movls r1, #16 - bls .L2355 + bls .L2426 cmp r4, #7 moveq r1, #32 movne r1, #2 -.L2355: - ldr r3, .L2416+12 +.L2426: + ldr r3, .L2487+12 ldr r2, [r3, #148] mov r3, #0 -.L2356: +.L2427: ldr r0, [r8, #0] strb r0, [r2, r3] add r3, r3, #1 uxtb r0, r3 cmp r0, r1 - bcc .L2356 + bcc .L2427 cmp r4, #7 - bne .L2357 + bne .L2428 mov r3, #0 -.L2359: +.L2430: ldrb r1, [r2, #0] @ zero_extendqisi2 cmp r1, #12 - beq .L2358 + beq .L2429 ldrb r1, [r2, #1] @ zero_extendqisi2 cmp r1, #10 - beq .L2358 + beq .L2429 add r3, r3, #1 add r2, r2, #4 uxtb r3, r3 cmp r3, #8 - bne .L2359 - b .L2360 -.L2358: + bne .L2430 + b .L2431 +.L2429: cmp r3, #6 - bls .L2361 -.L2360: - ldr r0, .L2416+16 + bls .L2432 +.L2431: + ldr r0, .L2487+16 mov r1, #0 bl printk -.L2362: - b .L2362 -.L2357: +.L2433: + b .L2433 +.L2428: cmp r4, #6 - bne .L2361 + bne .L2432 mov r1, #8 -.L2363: +.L2434: ldrb r3, [r2], #1 @ zero_extendqisi2 cmp r3, #12 - beq .L2361 + beq .L2432 ldrb r3, [r2, #7] @ zero_extendqisi2 cmp r3, #4 - beq .L2361 + beq .L2432 sub r1, r1, #1 uxtb r1, r1 cmp r1, #0 - bne .L2363 - b .L2415 -.L2365: - b .L2365 -.L2361: - ldr r3, .L2416+12 + bne .L2434 + b .L2486 +.L2436: + b .L2436 +.L2432: + ldr r3, .L2487+12 mov r2, #0 ldr ip, [r3, #148] str ip, [sp, #40] -.L2366: +.L2437: ldr r1, [r8, #0] ldr lr, [sp, #40] ldr ip, [sp, #52] strb r1, [lr, r2] add r2, r2, #1 cmp r2, ip - blt .L2366 + blt .L2437 ldr r2, [sp, #24] ldr r1, [r3, #148] mov r3, #8 @@ -21017,10 +21879,10 @@ HynixGetReadRetryDefault: mov lr, r2, asl #3 add r1, r1, ip str ip, [sp, #32] -.L2368: +.L2439: mov r2, #0 mov r0, r2 -.L2367: +.L2438: ldr ip, [r1, r2] add r0, r0, #1 mvn ip, ip @@ -21028,14 +21890,14 @@ HynixGetReadRetryDefault: ldr ip, [sp, #24] add r2, r2, #4 cmp r0, ip - blt .L2367 + blt .L2438 subs r3, r3, #1 add r1, r1, lr - bne .L2368 + bne .L2439 str r3, [sp, #16] str sl, [sp, #60] - b .L2369 -.L2373: + b .L2440 +.L2444: mov lr, #1 mov r0, #0 mov ip, lr, asl r2 @@ -21043,7 +21905,7 @@ HynixGetReadRetryDefault: mov sl, #16 str r3, [sp, #4] str sl, [sp, #20] -.L2371: +.L2442: ldr r3, [sp, #56] ldr r3, [r3, r0] and sl, ip, r3 @@ -21054,13 +21916,13 @@ HynixGetReadRetryDefault: subs r3, r3, #1 add r0, r0, sl str r3, [sp, #20] - bne .L2371 + bne .L2442 cmp lr, #8 add r2, r2, #1 orrhi r1, r1, ip cmp r2, #32 ldr r3, [sp, #4] - bne .L2373 + bne .L2444 ldr ip, [sp, #16] ldr r2, [sp, #24] add ip, ip, #1 @@ -21069,50 +21931,50 @@ HynixGetReadRetryDefault: str ip, [sp, #16] str r1, [sl, r3] add r3, r3, #4 - bge .L2374 -.L2369: - ldr sl, .L2416+12 + bge .L2445 +.L2440: + ldr sl, .L2487+12 mov r1, #0 mov r2, r1 ldr sl, [sl, #148] add ip, sl, r3 str ip, [sp, #56] str sl, [sp, #44] - b .L2373 -.L2374: - ldr r3, .L2416+12 + b .L2444 +.L2445: + ldr r3, .L2487+12 ldr sl, [sp, #60] ldr r1, [r3, #148] mov r3, #0 mov r2, r3 -.L2376: +.L2447: ldr r0, [r1, r3] add r3, r3, #4 cmp r0, #0 addeq r2, r2, #1 cmp r3, #32 - bne .L2376 + bne .L2447 cmp r2, #7 - ble .L2377 - ldr r0, .L2416+20 + ble .L2448 + ldr r0, .L2487+20 mov r2, #1 mov r3, #1024 bl rknand_print_hex - ldr r0, .L2416+16 + ldr r0, .L2487+16 mov r1, #0 bl printk -.L2378: - b .L2378 -.L2377: +.L2449: + b .L2449 +.L2448: cmp r4, #6 moveq r0, #4 streq r0, [sp, #16] - beq .L2379 + beq .L2450 cmp r4, #7 moveq lr, #10 movne lr, #8 str lr, [sp, #16] -.L2379: +.L2450: cmp r5, #0 ldr r0, [sp, #40] subne r3, r5, #1 @@ -21123,14 +21985,14 @@ HynixGetReadRetryDefault: ldr r1, [sp, #28] addne r3, r3, #1 strne r3, [sp, #20] - b .L2382 -.L2383: + b .L2453 +.L2454: ldrb lr, [ip], #1 @ zero_extendqisi2 strb lr, [r1, r3] add r3, r3, #1 uxtb lr, r3 cmp lr, r5 - bcc .L2383 + bcc .L2454 ldr r3, [sp, #20] add r2, r2, #1 ldr ip, [sp, #16] @@ -21138,12 +22000,12 @@ HynixGetReadRetryDefault: ldr r3, [sp, #48] add r1, r1, ip cmp r2, r3 - bge .L2384 -.L2382: + bge .L2455 +.L2453: mov ip, r0 mov r3, #0 - b .L2383 -.L2384: + b .L2454 +.L2455: mov r3, #255 mov r0, r6 str r3, [r8, #8] @@ -21152,10 +22014,10 @@ HynixGetReadRetryDefault: cmp ip, #1 movhi r3, #56 strhi r3, [r8, #8] - bhi .L2386 + bhi .L2457 mov r3, #54 str r3, [r8, #8] - ldr r3, .L2416 + ldr r3, .L2487 mov r0, sl mvn r1, #0 ldrb r3, [r3, #4] @ zero_extendqisi2 @@ -21164,36 +22026,36 @@ HynixGetReadRetryDefault: str r7, [r9, fp, asl #8] str r3, [r8, #8] bl FlashReadCmd -.L2386: +.L2457: mov r0, r6 add sl, sl, #1 bl NandcWaitFlashReady uxtb sl, sl -.L2346: - ldr r1, .L2416 +.L2417: + ldr r1, .L2487 ldrb r3, [r1, #3762] @ zero_extendqisi2 cmp r3, sl - bhi .L2387 + bhi .L2458 ldr r6, [sp, #48] -.L2345: - ldr r3, .L2416 +.L2416: + ldr r3, .L2487 strb r5, [r3, #1] strb r6, [r3, #2] add sp, sp, #68 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2415: - ldr r0, .L2416+16 +.L2486: + ldr r0, .L2487+16 bl printk - b .L2365 -.L2417: + b .L2436 +.L2488: .align 2 -.L2416: +.L2487: .word .LANCHOR0 .word .LANCHOR1 .word .LANCHOR1+3008 .word .LANCHOR2 - .word .LC142 - .word .LC143 + .word .LC162 + .word .LC163 .fnend .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault .align 2 @@ -21209,15 +22071,15 @@ FlashGetReadRetryDefault: ldmeqfd sp!, {r3, pc} sub r2, r3, #1 cmp r2, #6 - bhi .L2420 + bhi .L2491 ldmfd sp!, {r3, lr} b HynixGetReadRetryDefault -.L2420: +.L2491: cmp r3, #49 - bne .L2421 - ldr r0, .L2422 + bne .L2492 + ldr r0, .L2493 mov r2, #64 - ldr r1, .L2422+4 + ldr r1, .L2493+4 strb r3, [r0, #0] mov r3, #4 strb r3, [r0, #1] @@ -21226,12 +22088,12 @@ FlashGetReadRetryDefault: add r0, r0, #4 bl memcpy ldmfd sp!, {r3, pc} -.L2421: +.L2492: ldmfd sp!, {r3, lr} - b FlashGetReadRetryDefault.part.25 -.L2423: + b FlashGetReadRetryDefault.part.27 +.L2494: .align 2 -.L2422: +.L2493: .word .LANCHOR0 .word .LANCHOR1+2924 .fnend @@ -21247,9 +22109,9 @@ FlashInit: .save {r4, r5, r6, r7, r8, lr} mov r7, r0 mov r0, #32768 - ldr r5, .L2475 + ldr r5, .L2546 bl ftl_malloc - ldr r6, .L2475+4 + ldr r6, .L2546+4 mov r4, #0 str r0, [r5, #148] mov r0, #32768 @@ -21277,161 +22139,161 @@ FlashInit: str r0, [r5, #224] mov r0, r7 bl NandcInit - ldr r5, .L2475+8 + ldr r5, .L2546+8 mov r7, #44 -.L2428: +.L2499: uxtb r0, r4 mov r1, r5 bl FlashReadIDRaw cmp r4, #0 - bne .L2425 + bne .L2496 ldrb r3, [r6, #2980] @ zero_extendqisi2 sub r3, r3, #1 uxtb r3, r3 cmp r3, #253 - bhi .L2466 + bhi .L2537 ldrb r3, [r6, #2981] @ zero_extendqisi2 cmp r3, #255 - beq .L2467 -.L2425: + beq .L2538 +.L2496: ldrb r3, [r5, #0] @ zero_extendqisi2 add r4, r4, #1 cmp r3, #181 streqb r7, [r5, #0] cmp r4, #4 add r5, r5, #8 - bne .L2428 - ldr r4, .L2475+4 + bne .L2499 + ldr r4, .L2546+4 ldrb r3, [r4, #2980] @ zero_extendqisi2 cmp r3, #173 - beq .L2429 + beq .L2500 ldr r0, [r4, #3784] bl NandcSetDdrMode -.L2429: - ldr r5, .L2475+4 +.L2500: + ldr r5, .L2546+4 mov r1, #0 mov r2, #852 mov r0, r5 bl ftl_memset - ldr r3, .L2475+12 + ldr r3, .L2546+12 str r3, [r4, #3624] mov r3, #0 strb r3, [r4, #860] ldrb r3, [r4, #2981] @ zero_extendqisi2 cmp r3, #161 cmpne r3, #241 - beq .L2430 + beq .L2501 cmp r3, #218 - beq .L2430 + beq .L2501 cmp r3, #209 - beq .L2430 + beq .L2501 cmp r3, #220 - bne .L2431 + bne .L2502 ldrb r2, [r5, #2983] @ zero_extendqisi2 cmp r2, #149 - bne .L2431 -.L2430: - ldr r2, .L2475+4 + bne .L2502 +.L2501: + ldr r2, .L2546+4 mov r1, #1 mov r0, #16 - ldr ip, .L2475+16 + ldr ip, .L2546+16 strb r1, [r2, #852] - ldr r1, .L2475 + ldr r1, .L2546 strb r0, [r2, #853] strb r3, [ip, #3038] strb r0, [r1, #152] ldrb r0, [r2, #2980] @ zero_extendqisi2 cmp r0, #152 strb r0, [ip, #3037] - bne .L2432 + bne .L2503 ldrb r0, [r2, #2984] @ zero_extendqisi2 sxtb r0, r0 cmp r0, #0 movge r0, #24 strgeb r0, [r1, #152] -.L2432: +.L2503: ldr r1, [r2, #3776] - ldr r2, .L2475+20 + ldr r2, .L2546+20 cmp r1, r2 - ldreq r2, .L2475 + ldreq r2, .L2546 moveq r1, #16 streqb r1, [r2, #152] cmp r3, #218 - bne .L2434 - ldr r3, .L2475+16 + bne .L2505 + ldr r3, .L2546+16 movw r2, #3050 mov r1, #2048 strh r1, [r3, r2] @ movhi mvn r2, #37 - b .L2472 -.L2434: + b .L2543 +.L2505: cmp r3, #220 - bne .L2435 - ldr r3, .L2475+16 + bne .L2506 + ldr r3, .L2546+16 movw r2, #3050 mov r1, #4096 strh r1, [r3, r2] @ movhi mvn r2, #35 -.L2472: +.L2543: strb r2, [r3, #3038] -.L2435: - ldr r1, .L2475+24 +.L2506: + ldr r1, .L2546+24 mov r2, #32 - ldr r0, .L2475+28 + ldr r0, .L2546+28 bl memcpy - ldr r0, .L2475+12 + ldr r0, .L2546+12 mov r2, #32 add r1, r0, #144 bl memcpy -.L2431: - ldr r4, .L2475+4 +.L2502: + ldr r4, .L2546+4 ldrb r3, [r4, #852] @ zero_extendqisi2 cmp r3, #0 - bne .L2436 + bne .L2507 bl FlashLoadPhyInfoInRam cmp r0, #0 - bne .L2437 + bne .L2508 ldr r3, [r4, #3624] ldrh r0, [r3, #16] ubfx r0, r0, #8, #3 strb r0, [r4, #3772] tst r0, #1 - bne .L2437 + bne .L2508 mov r3, #1 strb r3, [r4, #3780] bl FlashSetInterfaceMode ldrb r0, [r4, #3772] @ zero_extendqisi2 bl NandcSetMode -.L2437: - ldr r4, .L2475+4 +.L2508: + ldr r4, .L2546+4 ldr r3, [r4, #3624] ldrb r3, [r3, #26] @ zero_extendqisi2 strb r3, [r4, #928] bl FlashLoadPhyInfo cmp r0, #0 - beq .L2436 + beq .L2507 ldr r3, [r4, #3784] cmp r3, #0 - beq .L2439 + beq .L2510 mov r0, #1 bl FlashSetInterfaceMode mov r0, #1 - b .L2473 -.L2439: + b .L2544 +.L2510: ldrb r0, [r4, #3772] @ zero_extendqisi2 bl FlashSetInterfaceMode ldrb r0, [r4, #3772] @ zero_extendqisi2 -.L2473: +.L2544: bl NandcSetMode bl FlashLoadPhyInfo cmp r0, #0 - beq .L2436 - ldr r4, .L2475+4 + beq .L2507 + ldr r4, .L2546+4 mov r0, #1 bl FlashSetInterfaceMode mov r0, #1 bl NandcSetMode - ldr r0, .L2475+32 + ldr r0, .L2546+32 ldr r3, [r4, #3624] ldrh r1, [r3, #14] bl printk @@ -21442,38 +22304,38 @@ FlashInit: ldr r3, [r4, #3624] ldrb r0, [r3, #19] @ zero_extendqisi2 bl FlashGetReadRetryDefault - ldr r1, .L2475+36 - ldr r0, .L2475 + ldr r1, .L2546+36 + ldr r0, .L2546 ldr r3, [r4, #3624] ldrh r1, [r0, r1] ldrb r2, [r3, #9] @ zero_extendqisi2 add r1, r1, #4080 add r1, r1, #15 cmp r2, r1, lsr #12 - blt .L2442 + blt .L2513 ldrh r1, [r3, #14] add r1, r1, #255 cmp r2, r1, lsr #8 - bge .L2443 -.L2442: + bge .L2514 +.L2513: ldrh r2, [r3, #14] bic r2, r2, #255 strh r2, [r3, #14] @ movhi -.L2443: - ldr r3, .L2475+4 +.L2514: + ldr r3, .L2546+4 ldrb r3, [r3, #3772] @ zero_extendqisi2 tst r3, #6 - beq .L2444 + beq .L2515 bl FlashSavePhyInfo - ldr r3, .L2475 + ldr r3, .L2546 mov r0, #0 ldr r1, [r3, #160] bl FlashDdrParaScan -.L2444: +.L2515: bl FlashSavePhyInfo -.L2436: - ldr r4, .L2475+4 - ldr r5, .L2475 +.L2507: + ldr r4, .L2546+4 + ldr r5, .L2546 ldr r3, [r4, #3624] ldrb r2, [r3, #26] @ zero_extendqisi2 ldrh r0, [r3, #10] @@ -21499,7 +22361,7 @@ FlashInit: ldr r3, [r4, #3624] ldrh r2, [r3, #16] tst r2, #64 - beq .L2445 + beq .L2516 ldrb r0, [r3, #19] @ zero_extendqisi2 ldrb r3, [r4, #1] @ zero_extendqisi2 strb r0, [r4, #3761] @@ -21509,77 +22371,77 @@ FlashInit: sub r3, r0, #1 uxtb r3, r3 cmp r3, #6 - bhi .L2446 - ldr r3, .L2475+40 + bhi .L2517 + ldr r3, .L2546+40 str r3, [r5, #172] sub r3, r0, #5 uxtb r3, r3 cmp r3, #1 movls r3, #1 strls r3, [r4, #3828] - bls .L2448 + bls .L2519 cmp r0, #7 addeq r4, r4, #28 - beq .L2449 -.L2448: - ldr r4, .L2475+44 -.L2449: + beq .L2520 +.L2519: + ldr r4, .L2546+44 +.L2520: mov r3, #0 mov r2, r3 -.L2451: +.L2522: ldrsb r1, [r4, r2] add r2, r2, #1 cmp r1, #0 addeq r3, r3, #1 cmp r2, #32 - bne .L2451 + bne .L2522 cmp r3, #27 - bls .L2445 + bls .L2516 bl FlashGetReadRetryDefault bl FlashSavePhyInfo - b .L2445 -.L2446: + b .L2516 +.L2517: sub r3, r0, #17 uxtb r3, r3 cmp r3, #2 - bhi .L2452 - ldr r3, .L2475+48 + bhi .L2523 + ldr r3, .L2546+48 cmp r0, #19 str r3, [r5, #172] mov r3, #7 strb r3, [r5, #140] moveq r3, #15 streqb r3, [r5, #140] - b .L2445 -.L2452: + b .L2516 +.L2523: cmp r0, #33 cmpne r0, #65 - beq .L2453 + beq .L2524 cmp r0, #66 - bne .L2454 -.L2453: - ldr r3, .L2475 + bne .L2525 +.L2524: + ldr r3, .L2546 mov r1, #4 - ldr r2, .L2475+52 + ldr r2, .L2546+52 str r2, [r3, #172] - ldr r2, .L2475+4 + ldr r2, .L2546+4 strb r1, [r2, #3760] mov r2, #7 strb r2, [r3, #140] - b .L2445 -.L2454: + b .L2516 +.L2525: cmp r0, #67 cmpne r0, #34 - beq .L2455 + beq .L2526 cmp r0, #35 - beq .L2455 + beq .L2526 cmp r0, #68 - bne .L2456 -.L2455: - ldr r3, .L2475 + bne .L2527 +.L2526: + ldr r3, .L2546 cmp r0, #35 cmpne r0, #68 - ldr r2, .L2475+52 + ldr r2, .L2546+52 sub r0, r0, #67 uxtb r0, r0 str r2, [r3, #172] @@ -21588,68 +22450,68 @@ FlashInit: moveq r2, #17 streqb r2, [r3, #140] cmp r0, #1 - ldr r3, .L2475+4 + ldr r3, .L2546+4 movls r2, #4 movhi r2, #5 strb r2, [r3, #3760] - b .L2445 -.L2456: + b .L2516 +.L2527: cmp r0, #49 - ldreq r3, .L2475+56 + ldreq r3, .L2546+56 streq r3, [r5, #172] -.L2445: - ldr r2, .L2475+4 - ldr r3, .L2475+20 +.L2516: + ldr r2, .L2546+4 + ldr r3, .L2546+20 ldr r1, [r2, #3776] cmp r1, r3 - bne .L2459 + bne .L2530 ldrb r3, [r2, #928] @ zero_extendqisi2 cmp r3, #0 ldrne r3, [r2, #3624] movne r1, #0 strneb r1, [r3, #18] -.L2459: +.L2530: ldrb r2, [r2, #2980] @ zero_extendqisi2 - ldr r3, .L2475+4 + ldr r3, .L2546+4 cmp r2, #44 - bne .L2460 + bne .L2531 ldrb r2, [r3, #3780] @ zero_extendqisi2 cmp r2, #0 - beq .L2460 + beq .L2531 ldr r1, [r3, #3776] - ldr r2, .L2475+20 + ldr r2, .L2546+20 cmp r1, r2 - bne .L2461 + bne .L2532 ldrb r3, [r3, #928] @ zero_extendqisi2 cmp r3, #0 - bne .L2460 -.L2461: - ldr r3, .L2475+4 + bne .L2531 +.L2532: + ldr r3, .L2546+4 mov r2, #0 mov r0, #1 strb r2, [r3, #3780] bl FlashSetInterfaceMode mov r0, #1 bl NandcSetMode -.L2460: +.L2531: mov r0, #0 bl flash_enter_slc_mode - ldr r2, .L2475+4 + ldr r2, .L2546+4 ldrb r3, [r2, #3772] @ zero_extendqisi2 tst r3, #6 - beq .L2462 + beq .L2533 ldrb r2, [r2, #3780] @ zero_extendqisi2 cmp r2, #0 - bne .L2463 + bne .L2534 tst r3, #1 - bne .L2462 -.L2463: - ldr r3, .L2475 + bne .L2533 +.L2534: + ldr r3, .L2546 mov r0, #0 ldr r1, [r3, #160] bl FlashDdrParaScan -.L2462: - ldr r4, .L2475+4 +.L2533: + ldr r4, .L2546+4 mov r0, #0 bl flash_exit_slc_mode mov r8, #16 @@ -21659,7 +22521,7 @@ FlashInit: bl FlashBchSel add r0, r4, #932 bl FlashReadIdbDataRaw - ldr r0, .L2475+60 + ldr r0, .L2546+60 strb r8, [r4, #853] bl FlashTimingCfg ldr r5, [r4, #3624] @@ -21703,7 +22565,7 @@ FlashInit: ldrb lr, [r4, #852] @ zero_extendqisi2 strh r1, [r4, r2] @ movhi cmp lr, #1 - bne .L2465 + bne .L2536 mov r7, r7, lsr #1 mov ip, ip, asl #1 mov r1, r1, asl #1 @@ -21713,21 +22575,21 @@ FlashInit: strh r7, [r4, r6] @ movhi strh ip, [r4, r0] @ movhi strh r2, [r4, r3] @ movhi -.L2465: +.L2536: ldrb r0, [r5, #20] @ zero_extendqisi2 bl FlashBchSel bl ftl_flash_suspend mov r0, #0 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L2466: +.L2537: mvn r0, #1 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L2467: +.L2538: mvn r0, #1 ldmfd sp!, {r4, r5, r6, r7, r8, pc} -.L2476: +.L2547: .align 2 -.L2475: +.L2546: .word .LANCHOR2 .word .LANCHOR0 .word .LANCHOR0+2980 @@ -21736,7 +22598,7 @@ FlashInit: .word 1446522928 .word .LANCHOR1+2796 .word .LANCHOR0+896 - .word .LC144 + .word .LC164 .word -894 .word HynixReadRetrial .word .LANCHOR0+20 @@ -21753,46 +22615,48 @@ rk_ftl_init: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 - stmfd sp!, {r3, r4, r5, lr} - .save {r3, r4, r5, lr} + stmfd sp!, {r4, r5, r6, lr} + .save {r4, r5, r6, lr} mov r0, #2048 bl ftl_malloc - ldr r4, .L2481 + ldr r4, .L2552 + ldr r6, .L2552+4 mov r5, #0 - add r1, r4, #464 - str r5, [r4, #132] - str r5, [r4, #464] - str r0, [r4, #460] - add r0, r4, #132 + mov r1, r6 + str r5, [r1, #472]! + str r0, [r6, #468] + mov r0, r4 + str r5, [r0, #132]! bl rknand_get_reg_addr ldr r3, [r4, #132] cmp r3, r5 mvneq r4, #0 - beq .L2478 + beq .L2549 bl rk_nandc_irq_init - ldr r0, [r4, #460] mov r1, r5 mov r2, r5 mov r3, #2048 + ldr r0, [r6, #468] bl FlashSramLoadStore bl rknand_flash_cs_init ldr r0, [r4, #132] bl FlashInit subs r4, r0, #0 - bne .L2479 + bne .L2550 bl FtlInit -.L2479: - ldr r0, .L2481+4 +.L2550: + ldr r0, .L2552+8 mov r1, r4 bl printk -.L2478: +.L2549: mov r0, r4 - ldmfd sp!, {r3, r4, r5, pc} -.L2482: + ldmfd sp!, {r4, r5, r6, pc} +.L2553: .align 2 -.L2481: +.L2552: .word .LANCHOR2 - .word .LC145 + .word .LANCHOR4 + .word .LC165 .fnend .size rk_ftl_init, .-rk_ftl_init .align 2 @@ -21802,7 +22666,7 @@ FtlReInitForSDUpdata: .fnstart @ args = 0, pretend = 0, frame = 16 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2508 + ldr r3, .L2579 stmfd sp!, {r4, r5, lr} .save {r4, r5, lr} .pad #20 @@ -21810,22 +22674,22 @@ FtlReInitForSDUpdata: ldrb r4, [r3, #928] @ zero_extendqisi2 cmp r4, #0 movne r0, #0 - bne .L2484 - ldr r5, .L2508+4 + bne .L2555 + ldr r5, .L2579+4 ldr r0, [r5, #132] bl FlashInit cmp r0, #0 movne r0, r4 - bne .L2484 + bne .L2555 bl FlashLoadFactorBbt cmp r0, #0 - beq .L2485 + beq .L2556 bl FlashMakeFactorBbt -.L2485: +.L2556: ldr r0, [r5, #136] bl FlashReadIdbDataRaw cmp r0, #0 - beq .L2486 + beq .L2557 mov r1, #0 mov r2, #16 mov r0, sp @@ -21834,73 +22698,73 @@ FtlReInitForSDUpdata: mov r3, #0 mov r0, #1 mov r2, r3 -.L2488: +.L2559: ands ip, r1, r0, asl r2 add r2, r2, #1 addne r3, r3, #1 cmp r2, #16 - bne .L2488 + bne .L2559 cmp r3, #6 - ldrls r3, .L2508 - bls .L2504 + ldrls r3, .L2579 + bls .L2575 mov r2, #0 mov r0, #1 -.L2489: +.L2560: ands ip, r1, r0, asl r2 add r2, r2, #1 addne r3, r3, #1 cmp r2, #24 - bne .L2489 + bne .L2560 cmp r3, #17 - ldr r3, .L2508 + ldr r3, .L2579 movhi r2, #36 -.L2504: +.L2575: strb r2, [r3, #853] movw r2, #3074 - ldr r3, .L2508 + ldr r3, .L2579 ldrb r1, [r3, #853] @ zero_extendqisi2 strh r1, [r3, r2] @ movhi -.L2486: - ldr r1, .L2508+8 +.L2557: + ldr r1, .L2579+8 mov r4, #1 - ldr r0, .L2508+12 + ldr r0, .L2579+12 bl printk - ldr r0, .L2508+16 + ldr r0, .L2579+16 bl FtlConstantsInit bl FtlVariablesInit - ldr r3, .L2508 + ldr r3, .L2579 ldr r0, [r3, #3852] uxth r0, r0 bl FtlFreeSysBlkQueueInit - b .L2493 -.L2495: + b .L2564 +.L2566: add r4, r4, #1 -.L2493: +.L2564: bl FtlLoadBbt cmp r0, #0 - bne .L2506 -.L2494: + bne .L2577 +.L2565: bl FtlSysBlkInit cmp r0, #0 - beq .L2496 -.L2506: + beq .L2567 +.L2577: bl FtlLowFormat cmp r4, #3 - bls .L2495 - b .L2507 -.L2496: - ldr r3, .L2508+20 + bls .L2566 + b .L2578 +.L2567: + ldr r3, .L2579+20 mov r2, #1 str r2, [r3, #2996] - b .L2484 -.L2507: + b .L2555 +.L2578: mvn r0, #0 -.L2484: +.L2555: add sp, sp, #20 ldmfd sp!, {r4, r5, pc} -.L2509: +.L2580: .align 2 -.L2508: +.L2579: .word .LANCHOR0 .word .LANCHOR2 .word .LC79 @@ -21917,15 +22781,15 @@ flash_boot_enter_slc_mode: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L2512 + ldr r3, .L2583 ldr r2, [r3, #3776] - ldr r3, .L2512+4 + ldr r3, .L2583+4 cmp r2, r3 bxne lr b flash_enter_slc_mode -.L2513: +.L2584: .align 2 -.L2512: +.L2583: .word .LANCHOR0 .word 1446522928 .fnend @@ -21938,15 +22802,15 @@ flash_boot_exit_slc_mode: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - ldr r3, .L2516 + ldr r3, .L2587 ldr r2, [r3, #3776] - ldr r3, .L2516+4 + ldr r3, .L2587+4 cmp r2, r3 bxne lr b flash_exit_slc_mode -.L2517: +.L2588: .align 2 -.L2516: +.L2587: .word .LANCHOR0 .word 1446522928 .fnend @@ -21960,13 +22824,13 @@ IdBlockReadData: stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r4, r0 - ldr r5, .L2522 + ldr r5, .L2593 mov fp, r1 .pad #28 sub sp, sp, #28 mov r1, r4 mov sl, r2 - ldr r0, .L2522+4 + ldr r0, .L2593+4 ldr r3, [r5, #3624] mov r2, fp mov r9, r5 @@ -21984,8 +22848,8 @@ IdBlockReadData: mul r2, r7, r8 str r1, [sp, #16] ubfx r2, r2, #2, #2 - b .L2519 -.L2521: + b .L2590 +.L2592: add r1, r6, r8 ldrb r0, [r5, #928] @ zero_extendqisi2 ubfx r1, r1, #2, #16 @@ -21996,12 +22860,12 @@ IdBlockReadData: add r3, r3, #3072 add r3, r3, #4 ldrh r3, [r3, #0] - beq .L2520 + beq .L2591 ldr r0, [r5, #3776] - ldr lr, .L2522+8 + ldr lr, .L2593+8 cmp r0, lr moveq r3, r1 -.L2520: +.L2591: ldr r1, [sp, #16] add r2, r2, r1 mla r2, r7, r3, r2 @@ -22009,7 +22873,7 @@ IdBlockReadData: ldrb r1, [r3, #9] @ zero_extendqisi2 ldrb r3, [r9, #3836] @ zero_extendqisi2 str r3, [sp, #20] - ldr r3, .L2522+12 + ldr r3, .L2593+12 ldrb r0, [r3, #152] @ zero_extendqisi2 str ip, [sp, #4] str r1, [sp, #8] @@ -22035,25 +22899,25 @@ IdBlockReadData: add r6, ip, r6 add sl, sl, ip, asl #9 uxth r6, r6 -.L2519: +.L2590: cmp r6, fp - bcc .L2521 + bcc .L2592 mov r1, r4 mov r2, fp mov r3, #0 - ldr r0, .L2522+16 + ldr r0, .L2593+16 bl printk mov r0, #0 add sp, sp, #28 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2523: +.L2594: .align 2 -.L2522: +.L2593: .word .LANCHOR0 - .word .LC146 + .word .LC166 .word 1446522928 .word .LANCHOR2 - .word .LC147 + .word .LC167 .fnend .size IdBlockReadData, .-IdBlockReadData .section .text.unlikely @@ -22063,7 +22927,7 @@ IDBlockWriteData: .fnstart @ args = 0, pretend = 0, frame = 88 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2532 + ldr r3, .L2603 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r5, r0 @@ -22073,7 +22937,7 @@ IDBlockWriteData: sub sp, sp, #92 mov r1, r5 mov sl, r2 - ldr r0, .L2532+4 + ldr r0, .L2603+4 ldrb r6, [r3, #9] @ zero_extendqisi2 mov r2, fp ldrh r7, [r3, #10] @@ -22091,14 +22955,14 @@ IDBlockWriteData: bl FlashEraseBlock cmp fp, r7 movls r8, #1 - bls .L2525 + bls .L2596 mov r0, #0 add r1, r7, r5 mov r2, r0 mov r8, #2 bl FlashEraseBlock -.L2525: - ldr r4, .L2532 +.L2596: + ldr r4, .L2603 mov r0, #0 bl flash_boot_exit_slc_mode ldr r3, [r4, #3624] @@ -22118,12 +22982,12 @@ IDBlockWriteData: rsb r1, r1, r5 mov r7, ip str r1, [sp, #12] - b .L2526 -.L2530: + b .L2597 +.L2601: add r3, r8, r7 ubfx r3, r3, #2, #16 cmp r3, #0 - beq .L2527 + beq .L2598 add r1, r3, #1 ldrb r0, [r4, #928] @ zero_extendqisi2 add r2, r4, r1, asl #1 @@ -22131,16 +22995,16 @@ IDBlockWriteData: add r2, r2, #3072 add r2, r2, #4 ldrh r2, [r2, #0] - beq .L2528 + beq .L2599 ldr r0, [r4, #3776] - ldr ip, .L2532+8 + ldr ip, .L2603+8 cmp r0, ip moveq r2, r1 -.L2528: +.L2599: sub r2, r2, #-1073741823 mov r2, r2, asl #2 str r2, [sp, #24] -.L2527: +.L2598: movw r2, #61424 str r2, [sp, #28] add r2, r4, r3, asl #1 @@ -22148,15 +23012,15 @@ IDBlockWriteData: ldrh r5, [r2, #4] ldrb r2, [r4, #928] @ zero_extendqisi2 cmp r2, #0 - beq .L2529 + beq .L2600 ldr r2, [r4, #3776] - ldr r1, .L2532+8 + ldr r1, .L2603+8 cmp r2, r1 moveq r5, r3 -.L2529: +.L2600: ldr ip, [sp, #12] add r8, r8, #4 - ldr r2, .L2532+12 + ldr r2, .L2603+12 uxth r8, r8 mla r3, r6, r5, ip ldrb ip, [r9, #3836] @ zero_extendqisi2 @@ -22190,27 +23054,27 @@ IDBlockWriteData: mov r1, r0 mov r0, #0 bl FlashPageProgMsbFFData -.L2526: +.L2597: ldr ip, [sp, #16] cmp r8, ip - bcc .L2530 + bcc .L2601 ldr r5, [sp, #20] mov r2, fp mov r3, #0 - ldr r0, .L2532+16 + ldr r0, .L2603+16 mov r1, r5 bl printk mov r0, #0 add sp, sp, #92 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2533: +.L2604: .align 2 -.L2532: +.L2603: .word .LANCHOR0 - .word .LC148 + .word .LC168 .word 1446522928 .word .LANCHOR2 - .word .LC149 + .word .LC169 .fnend .size IDBlockWriteData, .-IDBlockWriteData .text @@ -22221,7 +23085,7 @@ write_idblock: .fnstart @ args = 0, pretend = 0, frame = 24 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2558 + ldr r3, .L2629 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov r5, r0 @@ -22232,24 +23096,24 @@ write_idblock: mov r6, r1 mov r7, r2 ldrb r4, [r3, #9] @ zero_extendqisi2 - ldrh r8, [r3, #10] + ldrh sl, [r3, #10] bl ftl_malloc - subs sl, r0, #0 - beq .L2552 + subs r9, r0, #0 + beq .L2623 add r5, r5, #508 add r5, r5, #3 mov r5, r5, lsr #9 cmp r5, #8 movls r5, #8 - bls .L2536 + bls .L2607 cmp r5, #500 - bhi .L2552 -.L2536: - mul r4, r8, r4 - mov r0, r5 - uxth r4, r4 - str r4, [sp, #12] - mov r1, r4 + bhi .L2623 +.L2607: + mul sl, sl, r4 + uxth sl, sl + sub r0, sl, #1 + add r0, r0, r5 + mov r1, sl bl __aeabi_uidiv mov r3, #0 movw r2, #63999 @@ -22257,10 +23121,10 @@ write_idblock: str r0, [sp, #20] add r0, r6, #254976 add r0, r0, #1020 -.L2541: +.L2612: ldr r1, [r0], #-4 cmp r1, #0 - bne .L2537 + bne .L2608 ldr r1, [r6, r3, asl #2] add r3, r3, #1 cmp r3, ip @@ -22268,29 +23132,29 @@ write_idblock: movcs r3, #0 cmp r2, #4096 str r1, [r0, #4] - bne .L2541 - b .L2540 -.L2537: - ldr r0, .L2558+4 + bne .L2612 + b .L2611 +.L2608: + ldr r0, .L2629+4 bl printk -.L2540: - ldr r4, .L2558 +.L2611: + ldr r4, .L2629 mov r1, r7 mov r3, #5 - ldr r0, .L2558+8 + ldr r0, .L2629+8 mov r2, #4 mov r8, r5 bl rknand_print_hex ldrb r2, [r4, #853] @ zero_extendqisi2 ldr r1, [r6, #512] - ldr r0, .L2558+12 + ldr r0, .L2629+12 bl printk - ldr r2, .L2558+16 + ldr r2, .L2629+16 movw r3, #3074 mov r1, r5 ldrh r3, [r4, r3] ldr r2, [r2, #156] - ldr r0, .L2558+20 + ldr r0, .L2629+20 str r2, [sp, #0] mov r2, r5 bl printk @@ -22300,54 +23164,53 @@ write_idblock: mov r7, r6 mov r1, r5, asl #7 cmp r2, r3 + str r1, [sp, #24] mov r2, #0 - mov r9, r2 strhi r3, [r6, #512] - str r1, [sp, #24] str r2, [sp, #16] -.L2549: - ldr r1, .L2558 + str r2, [sp, #12] +.L2620: + ldr r1, .L2629 ldr r3, [r4], #4 ldrb r2, [r1, #853] @ zero_extendqisi2 cmp r3, r2 - bcs .L2543 - ldr r1, .L2558+16 + bcs .L2614 + ldr r1, .L2629+16 ldr r2, [r1, #156] cmp r3, r2 - bcc .L2543 + bcc .L2614 ldr r2, [sp, #20] - ldr r1, [sp, #20] + ldr r1, [sp, #12] cmp r2, #1 movls r2, #0 movhi r2, #1 - cmp r9, #0 - cmpne r1, #1 str r2, [sp, #28] - bls .L2544 + ldr r2, [sp, #20] + cmp r1, #0 + cmpne r2, #1 + bls .L2615 ldr r2, [r4, #-8] add r2, r2, #1 cmp r3, r2 - beq .L2543 -.L2544: - mov r0, sl + beq .L2614 +.L2615: + mov r0, r9 mov r1, #512 bl __memzero - ldr r2, [sp, #12] ldr r0, [r4, #-4] mov r1, r8 - mov r6, #0 - mul r0, r0, r2 mov r2, r7 + mov r6, #0 + mul r0, r0, sl bl IDBlockWriteData - ldr r3, [sp, #12] ldr r0, [r4, #-4] - mov r2, sl + mov r2, r9 mov r1, r8 - mul r0, r0, r3 + mul r0, r0, sl bl IdBlockReadData - mov r2, sl + mov r2, r9 mov r3, r7 -.L2548: +.L2619: mov fp, r2 mov r5, r3 ldr r0, [fp, #0] @@ -22355,13 +23218,13 @@ write_idblock: ldr r1, [r5, #0] add r3, r3, #4 cmp r0, r1 - beq .L2545 - mov r0, sl + beq .L2616 + mov r0, r9 mov r1, #512 bl __memzero ldr r3, [fp, #0] - mov r1, r9 - ldr r0, .L2558+24 + ldr r1, [sp, #12] + ldr r0, .L2629+24 str r3, [sp, #0] ldr r3, [r5, #0] bic r5, r6, #255 @@ -22370,82 +23233,82 @@ write_idblock: mov r3, r6 ldr r2, [r4, #-4] bl printk - ldr r0, .L2558+28 + ldr r0, .L2629+28 add r1, r7, r5 mov r2, #4 mov r3, #256 bl rknand_print_hex mov r3, #256 - add r1, sl, r5 + add r1, r9, r5 mov r2, #4 - ldr r0, .L2558+32 + ldr r0, .L2629+32 bl rknand_print_hex mov r0, #0 bl flash_boot_enter_slc_mode - ldr r2, [sp, #12] ldr r1, [r4, #-4] mov r0, #0 - mul r1, r1, r2 mov r2, r0 + mul r1, r1, sl bl FlashEraseBlock ldr r3, [sp, #28] cmp r3, #0 - beq .L2546 + beq .L2617 ldr r1, [r4, #-4] mov r0, #0 - ldr r2, [sp, #12] - add r1, r1, #1 - mul r1, r2, r1 mov r2, r0 + add r1, r1, #1 + mul r1, sl, r1 bl FlashEraseBlock -.L2546: +.L2617: mov r0, #0 bl flash_boot_exit_slc_mode - ldr r0, .L2558+36 ldr r1, [r4, #-4] + ldr r0, .L2629+36 bl printk - ldr r3, [sp, #24] - cmp r6, r3 - bcc .L2543 - b .L2547 -.L2545: + ldr r1, [sp, #24] + cmp r6, r1 + bcc .L2614 + b .L2618 +.L2616: ldr r1, [sp, #24] add r6, r6, #1 cmp r6, r1 - bne .L2548 -.L2547: + bne .L2619 +.L2618: ldr r2, [sp, #16] add r2, r2, #1 str r2, [sp, #16] -.L2543: - add r9, r9, #1 - cmp r9, #5 - bne .L2549 - mov r0, sl +.L2614: + ldr r3, [sp, #12] + add r3, r3, #1 + str r3, [sp, #12] + cmp r3, #5 + bne .L2620 + mov r0, r9 bl ftl_free - ldr r3, [sp, #16] - cmp r3, #0 + ldr r1, [sp, #16] + cmp r1, #0 mvneq r0, #0 movne r0, #0 - b .L2535 -.L2552: + b .L2606 +.L2623: mvn r0, #0 -.L2535: +.L2606: add sp, sp, #36 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2559: +.L2630: .align 2 -.L2558: +.L2629: .word .LANCHOR0 - .word .LC150 - .word .LC151 - .word .LC152 + .word .LC170 + .word .LC171 + .word .LC172 .word .LANCHOR2 - .word .LC153 - .word .LC154 - .word .LC155 - .word .LC156 - .word .LC157 + .word .LC173 + .word .LC174 + .word .LC175 + .word .LC176 + .word .LC177 .fnend .size write_idblock, .-write_idblock .align 2 @@ -22460,22 +23323,22 @@ CRC_32: stmfd sp!, {r4, lr} .save {r4, lr} mov r2, r0 - ldr ip, .L2563 - b .L2561 -.L2562: + ldr ip, .L2634 + b .L2632 +.L2633: ldrb r4, [r3, r2] @ zero_extendqisi2 add r2, r2, #1 eor r4, r4, r0, lsr #24 add r4, ip, r4, asl #2 ldr r4, [r4, #3068] eor r0, r4, r0, asl #8 -.L2561: +.L2632: cmp r2, r1 - bne .L2562 + bne .L2633 ldmfd sp!, {r4, pc} -.L2564: +.L2635: .align 2 -.L2563: +.L2634: .word .LANCHOR1 .fnend .size CRC_32, .-CRC_32 @@ -22486,7 +23349,7 @@ rknand_sys_storage_ioctl: .fnstart @ args = 0, pretend = 0, frame = 528 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2681 + ldr r3, .L2752 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} cmp r1, r3 @@ -22494,102 +23357,102 @@ rknand_sys_storage_ioctl: sub sp, sp, #528 mov r5, r1 mov r4, r2 - beq .L2574 - bhi .L2583 - ldr r3, .L2681+4 + beq .L2645 + bhi .L2654 + ldr r3, .L2752+4 cmp r1, r3 - beq .L2571 - bhi .L2584 + beq .L2642 + bhi .L2655 sub r3, r3, #125 cmp r1, r3 - beq .L2568 - bhi .L2585 + beq .L2639 + bhi .L2656 sub r3, r3, #237 cmp r1, r3 - bne .L2627 - b .L2677 -.L2585: - ldr r3, .L2681+8 + bne .L2698 + b .L2748 +.L2656: + ldr r3, .L2752+8 cmp r1, r3 - beq .L2569 + beq .L2640 add r3, r3, #1 cmp r1, r3 - bne .L2627 - b .L2678 -.L2584: - ldr r3, .L2681+12 + bne .L2698 + b .L2749 +.L2655: + ldr r3, .L2752+12 cmp r1, r3 - beq .L2573 - bhi .L2586 - ldr r3, .L2681+16 + beq .L2644 + bhi .L2657 + ldr r3, .L2752+16 cmp r1, r3 - bne .L2627 - b .L2679 -.L2586: - ldr r3, .L2681+20 + bne .L2698 + b .L2750 +.L2657: + ldr r3, .L2752+20 cmp r1, r3 - beq .L2573 + beq .L2644 add r3, r3, #10 cmp r1, r3 - bne .L2627 - b .L2573 -.L2583: - ldr r3, .L2681+24 + bne .L2698 + b .L2644 +.L2654: + ldr r3, .L2752+24 cmp r1, r3 - beq .L2579 - bhi .L2587 + beq .L2650 + bhi .L2658 sub r3, r3, #78 cmp r1, r3 - beq .L2576 - bcc .L2575 + beq .L2647 + bcc .L2646 add r3, r3, #21 cmp r1, r3 - beq .L2577 + beq .L2648 add r3, r3, #56 cmp r1, r3 - bne .L2627 - b .L2680 -.L2587: - ldr r3, .L2681+28 + bne .L2698 + b .L2751 +.L2658: + ldr r3, .L2752+28 cmp r1, r3 - beq .L2582 - bhi .L2588 + beq .L2653 + bhi .L2659 sub r3, r3, #956 sub r3, r3, #1 cmp r1, r3 - beq .L2580 + beq .L2651 add r3, r3, #956 cmp r1, r3 - bne .L2627 - b .L2581 -.L2588: - ldr r3, .L2681+32 + bne .L2698 + b .L2652 +.L2659: + ldr r3, .L2752+32 cmp r1, r3 - beq .L2581 + beq .L2652 add r3, r3, #1 cmp r1, r3 - bne .L2627 - b .L2582 -.L2575: - ldr r0, .L2681+36 + bne .L2698 + b .L2653 +.L2646: + ldr r0, .L2752+36 bl printk mov r0, #4096 bl ftl_malloc subs r5, r0, #0 - beq .L2634 + beq .L2705 mov r1, r4 mov r2, #512 bl rk_copy_from_user cmp r0, #0 - bne .L2676 -.L2589: - ldr r0, .L2681+40 + bne .L2747 +.L2660: + ldr r0, .L2752+40 ldmia r5, {r1, r2} bl printk ldr r3, [r5, #4] cmp r3, #8 str r3, [sp, #4] - bhi .L2598 + bhi .L2669 bl rknand_device_lock ldr r1, [sp, #4] mov r2, r5 @@ -22602,137 +23465,137 @@ rknand_sys_storage_ioctl: mov r2, r2, asl #9 bl rk_copy_to_user cmp r0, #0 - beq .L2662 - ldr r0, .L2681+44 -.L2675: + beq .L2733 + ldr r0, .L2752+44 +.L2746: bl printk - b .L2598 -.L2576: - ldr r0, .L2681+48 + b .L2669 +.L2647: + ldr r0, .L2752+48 bl printk mov r0, #4096 bl ftl_malloc subs r5, r0, #0 - beq .L2634 + beq .L2705 mov r1, r4 mov r2, #4096 bl rk_copy_from_user cmp r0, #0 - bne .L2676 -.L2593: - ldr r4, .L2681+52 - ldr r0, .L2681+56 + bne .L2747 +.L2664: + ldr r4, .L2752+52 + ldr r0, .L2752+56 ldmia r5, {r1, r2} bl printk - ldr r3, [r4, #468] + ldr r3, [r4, #476] cmp r3, #0 - bne .L2594 + bne .L2665 mov r0, #260096 bl ftl_malloc cmp r0, #0 - str r0, [r4, #468] - beq .L2598 -.L2595: + str r0, [r4, #476] + beq .L2669 +.L2666: mov r1, #260096 bl __memzero -.L2594: +.L2665: ldr r2, [r5, #4] movw r3, #4088 cmp r2, r3 - bhi .L2598 + bhi .L2669 ldr r3, [r5, #0] cmp r3, #251904 - bhi .L2598 - ldr r1, .L2681+52 - ldr r0, [r1, #468] + bhi .L2669 + ldr r1, .L2752+52 + ldr r0, [r1, #476] add r1, r5, #8 add r0, r0, r3 bl memcpy -.L2662: +.L2733: mov r0, r5 bl ftl_free -.L2663: +.L2734: mov r4, #0 - b .L2592 -.L2680: - ldr r0, .L2681+60 + b .L2663 +.L2751: + ldr r0, .L2752+60 bl printk mov r0, #4096 bl ftl_malloc subs r5, r0, #0 - beq .L2634 + beq .L2705 mov r1, r4 mov r2, #28 bl rk_copy_from_user cmp r0, #0 - beq .L2597 -.L2676: - ldr r0, .L2681+64 - b .L2675 -.L2597: + beq .L2668 +.L2747: + ldr r0, .L2752+64 + b .L2746 +.L2668: ldmia r5, {r1, r2} - ldr r0, .L2681+68 + ldr r0, .L2752+68 bl printk ldr r1, [r5, #0] cmp r1, #256000 - bhi .L2598 - ldr r4, .L2681+52 - ldr r0, [r4, #468] + bhi .L2669 + ldr r4, .L2752+52 + ldr r0, [r4, #476] cmp r0, #0 - beq .L2598 -.L2599: + beq .L2669 +.L2670: bl CRC_32 ldr r3, [r5, #4] cmp r3, r0 - beq .L2600 + beq .L2671 mov r0, r5 bl ftl_free - b .L2640 -.L2600: + b .L2711 +.L2671: bl rknand_device_lock - ldr r1, [r4, #468] + ldr r1, [r4, #476] add r2, r5, #8 ldr r0, [r5, #0] bl write_idblock mov r6, #0 bl rknand_device_unlock - ldr r0, [r4, #468] + ldr r0, [r4, #476] bl ftl_free - str r6, [r4, #468] + str r6, [r4, #476] mov r0, r5 mov r4, r6 bl ftl_free - b .L2592 -.L2598: + b .L2663 +.L2669: mov r0, r5 - b .L2666 -.L2577: - ldr r0, .L2681+72 + b .L2737 +.L2648: + ldr r0, .L2752+72 bl printk mov r0, #4096 bl ftl_malloc subs r5, r0, #0 - beq .L2634 + beq .L2705 bl ftl_read_flash_info mov r0, r4 mov r1, r5 mov r2, #11 - b .L2671 -.L2574: - ldr r0, .L2681+76 + b .L2742 +.L2645: + ldr r0, .L2752+76 bl printk bl nand_blk_add_whole_disk mov r0, #4096 bl ftl_malloc subs r5, r0, #0 - beq .L2634 + beq .L2705 bl rknand_device_lock mov r1, #0 mov r2, #64 mov r0, r5 bl FlashReadFacBbtData bl rknand_device_unlock - ldr r0, .L2681+80 + ldr r0, .L2752+80 mov r1, r5 mov r2, #4 mov r3, #8 @@ -22740,25 +23603,25 @@ rknand_sys_storage_ioctl: mov r0, r4 mov r1, r5 mov r2, #64 - b .L2671 -.L2579: - ldr r0, .L2681+84 + b .L2742 +.L2650: + ldr r0, .L2752+84 bl printk - ldr r3, .L2681+52 + ldr r3, .L2752+52 add r1, sp, #528 mov r0, r4 mov r2, #4 - ldr r3, [r3, #472] + ldr r3, [r3, #480] ldr r3, [r3, #20] str r3, [r1, #-524]! - b .L2667 -.L2580: - ldr r0, .L2681+88 + b .L2738 +.L2651: + ldr r0, .L2752+88 bl printk mov r0, #4096 bl ftl_malloc subs r5, r0, #0 - beq .L2634 + beq .L2705 bl rknand_device_lock mov r1, #264 mov r2, #2 @@ -22769,259 +23632,259 @@ rknand_sys_storage_ioctl: mov r0, r4 mov r1, r5 mov r2, #1024 -.L2671: +.L2742: bl rk_copy_to_user subs r4, r0, #0 mov r0, r5 - beq .L2603 -.L2666: + beq .L2674 +.L2737: bl ftl_free - b .L2657 -.L2603: + b .L2728 +.L2674: bl ftl_free - b .L2592 -.L2568: - ldr r0, .L2681+92 + b .L2663 +.L2639: + ldr r0, .L2752+92 bl printk add r0, sp, #8 mov r1, r4 mov r2, #520 bl rk_copy_from_user subs r5, r0, #0 - bne .L2668 -.L2604: + bne .L2739 +.L2675: ldr r2, [sp, #8] - ldr r3, .L2681+96 + ldr r3, .L2752+96 cmp r2, r3 - bne .L2659 + bne .L2730 ldr r3, [sp, #12] cmp r3, #512 - bhi .L2659 - ldr r6, .L2681+52 + bhi .L2730 + ldr r6, .L2752+52 mov r2, #512 add r0, sp, #8 - ldr r1, [r6, #472] + ldr r1, [r6, #480] bl memcpy - ldr r2, [r6, #476] - ldr r3, .L2681+100 + ldr r2, [r6, #484] + ldr r3, .L2752+100 cmp r2, r3 - beq .L2605 + beq .L2676 add r0, sp, #72 mov r1, #128 str r5, [sp, #16] str r5, [sp, #20] bl __memzero -.L2605: +.L2676: add r0, sp, #264 mov r1, #256 mov r3, #0 str r3, [sp, #24] bl __memzero - b .L2674 -.L2569: - ldr r0, .L2681+104 + b .L2745 +.L2640: + ldr r0, .L2752+104 bl printk add r0, sp, #8 mov r1, r4 mov r2, #520 bl rk_copy_from_user cmp r0, #0 - bne .L2668 -.L2606: + bne .L2739 +.L2677: ldr r2, [sp, #8] - ldr r3, .L2681+96 + ldr r3, .L2752+96 cmp r2, r3 - bne .L2659 + bne .L2730 ldr r3, [sp, #12] cmp r3, #512 - bhi .L2659 - ldr r4, .L2681+52 - ldr r3, .L2681+100 - ldr r2, [r4, #476] + bhi .L2730 + ldr r4, .L2752+52 + ldr r3, .L2752+100 + ldr r2, [r4, #484] cmp r2, r3 - bne .L2640 + bne .L2711 ldr r3, [sp, #20] sub r2, r3, #1 cmp r2, #127 mvnhi r4, #2 - bhi .L2566 - ldr r0, [r4, #472] + bhi .L2637 + ldr r0, [r4, #480] add r1, sp, #72 str r3, [r0, #12] add r0, r0, #64 ldr r2, [sp, #20] bl memcpy mov r0, #1 - ldr r1, [r4, #472] - b .L2664 -.L2679: - ldr r0, .L2681+108 + ldr r1, [r4, #480] + b .L2735 +.L2750: + ldr r0, .L2752+108 bl printk add r0, sp, #8 mov r1, r4 mov r2, #520 bl rk_copy_from_user cmp r0, #0 - bne .L2668 -.L2607: + bne .L2739 +.L2678: ldr r2, [sp, #8] - ldr r3, .L2681+112 + ldr r3, .L2752+112 cmp r2, r3 - bne .L2659 + bne .L2730 ldr r3, [sp, #12] cmp r3, #512 - bhi .L2659 - ldr r5, .L2681+52 - ldr r4, [r5, #480] + bhi .L2730 + ldr r5, .L2752+52 + ldr r4, [r5, #488] cmp r4, #0 - beq .L2566 - ldr r3, [r5, #484] - ldr r2, .L2681+116 + beq .L2637 + ldr r3, [r5, #492] + ldr r2, .L2752+116 ldr r1, [r3, #0] cmp r1, r2 - beq .L2608 + beq .L2679 str r2, [r3, #0] mov r2, #504 - ldr r3, [r5, #484] + ldr r3, [r5, #492] str r2, [r3, #4] mov r2, #0 str r2, [r3, #8] str r2, [r3, #12] -.L2608: - ldr r1, [r5, #484] +.L2679: + ldr r1, [r5, #492] mov r4, #0 mov r0, r4 str r4, [r1, #16] bl StorageSysDataStore - ldr r3, [r5, #472] - ldr r2, .L2681+96 - ldr r5, .L2681+52 + ldr r3, [r5, #480] + ldr r2, .L2752+96 + ldr r5, .L2752+52 ldr r1, [r3, #0] cmp r1, r2 strne r2, [r3, #0] - ldr r0, [r5, #472] + ldr r0, [r5, #480] mov r1, #128 - ldrne r3, .L2681+52 + ldrne r3, .L2752+52 movne r2, #504 - ldrne r3, [r3, #472] + ldrne r3, [r3, #480] stmneib r3, {r2, r4} mov r4, #0 str r4, [r0, #12] add r0, r0, #64 bl __memzero mov r0, #1 - ldr r1, [r5, #472] + ldr r1, [r5, #480] bl StorageSysDataStore - str r4, [r5, #480] - str r4, [r5, #476] - b .L2592 -.L2571: - ldr r0, .L2681+120 + str r4, [r5, #488] + str r4, [r5, #484] + b .L2663 +.L2642: + ldr r0, .L2752+120 bl printk mov r1, r4 add r0, sp, #8 mov r2, #520 bl rk_copy_from_user subs r4, r0, #0 - bne .L2668 -.L2610: + bne .L2739 +.L2681: ldr r2, [sp, #8] - ldr r3, .L2681+124 + ldr r3, .L2752+124 cmp r2, r3 - bne .L2659 + bne .L2730 ldr r3, [sp, #12] cmp r3, #512 - bhi .L2659 - ldr r5, .L2681+52 - ldr r3, [r5, #480] + bhi .L2730 + ldr r5, .L2752+52 + ldr r3, [r5, #488] cmp r3, #1 - beq .L2566 - ldr r3, [r5, #484] + beq .L2637 + ldr r3, [r5, #492] mov r0, #0 - ldr r2, .L2681+116 + ldr r2, .L2752+116 ldr r1, [r3, #0] cmp r1, r2 strne r2, [r3, #0] - ldr r1, [r5, #484] - ldrne r3, [r5, #484] + ldr r1, [r5, #492] + ldrne r3, [r5, #492] movne r2, #504 strne r4, [r3, #12] stmneib r3, {r2, r4} mov r3, #1 str r3, [r1, #16] bl StorageSysDataStore - ldr r3, [r5, #472] - ldr r2, .L2681+96 + ldr r3, [r5, #480] + ldr r2, .L2752+96 ldr r1, [r3, #0] cmp r1, r2 - beq .L2612 + beq .L2683 str r2, [r3, #0] mov r1, #504 - ldr r3, .L2681+52 + ldr r3, .L2752+52 mov r2, #0 - ldr r3, [r3, #472] + ldr r3, [r3, #480] stmib r3, {r1, r2} -.L2612: - ldr r5, .L2681+52 +.L2683: + ldr r5, .L2752+52 mov r1, #128 mov r4, #0 - ldr r0, [r5, #472] + ldr r0, [r5, #480] str r4, [r0, #12] add r0, r0, #64 bl __memzero mov r0, #1 - ldr r1, [r5, #472] + ldr r1, [r5, #480] bl StorageSysDataStore mov r3, #1 - str r3, [r5, #480] - b .L2592 -.L2678: - ldr r0, .L2681+128 + str r3, [r5, #488] + b .L2663 +.L2749: + ldr r0, .L2752+128 bl printk add r0, sp, #8 mov r1, r4 mov r2, #520 bl rk_copy_from_user cmp r0, #0 - bne .L2668 -.L2613: + bne .L2739 +.L2684: ldr r2, [sp, #8] - ldr r3, .L2681+132 + ldr r3, .L2752+132 cmp r2, r3 - bne .L2659 + bne .L2730 ldr r2, [sp, #12] cmp r2, #512 addls r0, sp, #16 - ldrls r1, .L2681+136 - bls .L2673 - b .L2659 -.L2573: - ldr r3, .L2681+20 + ldrls r1, .L2752+136 + bls .L2744 + b .L2730 +.L2644: + ldr r3, .L2752+20 cmp r5, r3 - ldreq r0, .L2681+140 - beq .L2660 - ldr r3, .L2681+144 + ldreq r0, .L2752+140 + beq .L2731 + ldr r3, .L2752+144 cmp r5, r3 - ldreq r0, .L2681+148 - ldrne r0, .L2681+152 -.L2660: + ldreq r0, .L2752+148 + ldrne r0, .L2752+152 +.L2731: bl printk add r0, sp, #8 mov r1, r4 mov r2, #520 bl rk_copy_from_user cmp r0, #0 - bne .L2668 -.L2617: + bne .L2739 +.L2688: ldr r2, [sp, #8] - ldr r3, .L2681+156 + ldr r3, .L2752+156 cmp r2, r3 - bne .L2657 - ldr r3, .L2681+144 - ldr r6, .L2681+52 + bne .L2728 + ldr r3, .L2752+144 + ldr r6, .L2752+52 cmp r5, r3 - bne .L2618 - ldr r3, [r6, #472] + bne .L2689 + ldr r3, [r6, #480] mov r0, r4 add r1, sp, #8 mov r2, #16 @@ -23032,29 +23895,29 @@ rknand_sys_storage_ioctl: cmp r0, #0 moveq r4, r0 mvnne r4, #13 - b .L2566 -.L2618: - ldr r3, [r6, #1000] + b .L2637 +.L2689: + ldr r3, [r6, #1008] cmp r3, #10 - bhi .L2657 - ldr r3, [r6, #472] + bhi .L2728 + ldr r3, [r6, #480] ldr r1, [sp, #12] ldr r2, [r3, #24] cmp r2, r1 - beq .L2619 + beq .L2690 cmp r2, #0 - beq .L2619 - ldr r0, .L2681+160 + beq .L2690 + ldr r0, .L2752+160 bl printk - ldr r3, [r6, #1000] + ldr r3, [r6, #1008] add r3, r3, #1 - str r3, [r6, #1000] - b .L2657 -.L2619: - ldr r0, .L2681+52 + str r3, [r6, #1008] + b .L2728 +.L2690: + ldr r0, .L2752+52 mov r2, #0 - str r2, [r0, #1000] - ldr r0, .L2681+20 + str r2, [r0, #1008] + ldr r0, .L2752+20 cmp r5, r0 mov r0, #1 strne r1, [r3, #24] @@ -23067,112 +23930,112 @@ rknand_sys_storage_ioctl: cmn r0, #1 mvneq r4, #1 movne r4, #0 - b .L2592 -.L2581: - ldr r0, .L2681+164 + b .L2663 +.L2652: + ldr r0, .L2752+164 bl printk add r0, sp, #8 mov r1, r4 mov r2, #520 bl rk_copy_from_user cmp r0, #0 - bne .L2668 -.L2622: + bne .L2739 +.L2693: ldr r2, [sp, #8] - ldr r3, .L2681+168 + ldr r3, .L2752+168 cmp r2, r3 - bne .L2659 + bne .L2730 ldr r2, [sp, #12] cmp r2, #504 - bhi .L2659 - ldr r3, .L2681+172 + bhi .L2730 + ldr r3, .L2752+172 add r0, sp, #16 cmp r5, r3 - ldr r3, .L2681+52 - ldreq r1, [r3, #1004] - ldrne r1, [r3, #1008] + ldr r3, .L2752+52 + ldreq r1, [r3, #1012] + ldrne r1, [r3, #1016] add r1, r1, #8 -.L2673: +.L2744: bl memcpy -.L2674: +.L2745: add r1, sp, #8 mov r0, r4 mov r2, #520 -.L2667: +.L2738: bl rk_copy_to_user subs r4, r0, #0 - bne .L2657 - b .L2592 -.L2582: - ldr r0, .L2681+176 + bne .L2728 + b .L2663 +.L2653: + ldr r0, .L2752+176 bl printk add r0, sp, #8 mov r1, r4 mov r2, #520 bl rk_copy_from_user cmp r0, #0 - beq .L2625 -.L2668: - ldr r0, .L2681+64 + beq .L2696 +.L2739: + ldr r0, .L2752+64 bl printk - b .L2657 -.L2625: + b .L2728 +.L2696: ldr r2, [sp, #8] - ldr r3, .L2681+168 + ldr r3, .L2752+168 cmp r2, r3 - bne .L2659 + bne .L2730 ldr r2, [sp, #12] cmp r2, #504 - bhi .L2659 - ldr r3, .L2681+28 + bhi .L2730 + ldr r3, .L2752+28 add r2, r2, #8 - ldr r4, .L2681+52 + ldr r4, .L2752+52 cmp r5, r3 - bne .L2626 + bne .L2697 add r1, sp, #8 - ldr r0, [r4, #1004] + ldr r0, [r4, #1012] bl memcpy - ldr r1, [r4, #1004] + ldr r1, [r4, #1012] mov r0, #2 -.L2664: +.L2735: bl StorageSysDataStore mov r4, r0 - b .L2592 -.L2626: + b .L2663 +.L2697: add r1, sp, #8 - ldr r0, [r4, #1008] + ldr r0, [r4, #1016] bl memcpy mov r0, #3 - ldr r1, [r4, #1008] - b .L2664 -.L2677: - bl rknand_dev_flush - b .L2663 -.L2659: + ldr r1, [r4, #1016] + b .L2735 +.L2748: + bl rknand_dev_flush + b .L2734 +.L2730: mvn r4, #0 -.L2592: +.L2663: mov r1, r4 - ldr r0, .L2681+180 + ldr r0, .L2752+180 bl printk - b .L2566 -.L2627: + b .L2637 +.L2698: mvn r4, #21 - b .L2566 -.L2634: + b .L2637 +.L2705: mvn r4, #11 - b .L2566 -.L2640: + b .L2637 +.L2711: mvn r4, #1 - b .L2566 -.L2657: + b .L2637 +.L2728: mvn r4, #13 -.L2566: +.L2637: mov r0, r4 add sp, sp, #528 ldmfd sp!, {r4, r5, r6, pc} -.L2682: +.L2753: .align 2 -.L2681: +.L2752: .word 1074033155 .word 1074029694 .word 1074029570 @@ -23182,43 +24045,43 @@ rknand_sys_storage_ioctl: .word 1074033235 .word 1074034193 .word 1074034194 - .word .LC158 - .word .LC160 - .word .LC161 - .word .LC162 - .word .LANCHOR2 - .word .LC163 - .word .LC164 - .word .LC159 - .word .LC165 - .word .LC166 - .word .LC167 - .word .LC168 - .word .LC169 - .word .LC170 - .word .LC171 + .word .LC178 + .word .LC180 + .word .LC181 + .word .LC182 + .word .LANCHOR4 + .word .LC183 + .word .LC184 + .word .LC179 + .word .LC185 + .word .LC186 + .word .LC187 + .word .LC188 + .word .LC189 + .word .LC190 + .word .LC191 .word 1263358532 .word -1067903959 - .word .LC172 - .word .LC173 + .word .LC192 + .word .LC193 .word 1112753220 .word 1146313043 - .word .LC174 + .word .LC194 .word 1112755781 - .word .LC175 + .word .LC195 .word 1094995539 - .word .LANCHOR2+488 - .word .LC176 + .word .LANCHOR4+496 + .word .LC196 .word 1074031676 - .word .LC177 - .word .LC178 + .word .LC197 + .word .LC198 .word 1280262987 - .word .LC179 - .word .LC180 + .word .LC199 + .word .LC200 .word 1145980246 .word 1074034192 - .word .LC181 - .word .LC182 + .word .LC201 + .word .LC202 .fnend .size rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl .align 2 @@ -23231,55 +24094,55 @@ rk_ftl_storage_sys_init: stmfd sp!, {r3, r4, r5, r6, r7, lr} .save {r3, r4, r5, r6, r7, lr} mov r2, #512 - ldr r4, .L2686 + ldr r4, .L2757 mov r6, #0 - add r0, r4, #488 - ldr r5, [r4, #460] - str r6, [r4, #468] + add r0, r4, #496 + ldr r5, [r4, #468] + str r6, [r4, #476] add r1, r5, #1536 add r3, r5, #512 - str r5, [r4, #484] - str r3, [r4, #472] + str r5, [r4, #492] + str r3, [r4, #480] add r3, r5, #1024 - str r1, [r4, #1008] - str r3, [r4, #1004] + str r1, [r4, #1016] + str r3, [r4, #1012] bl memcpy ldr r7, [r5, #508] ldr r3, [r5, #16] cmp r7, r6 - str r6, [r4, #476] - str r6, [r4, #1000] - str r3, [r4, #480] - beq .L2684 + str r6, [r4, #484] + str r6, [r4, #1008] + str r3, [r4, #488] + beq .L2755 mov r0, r5 mov r1, #508 bl JSHash cmp r7, r0 - beq .L2684 + beq .L2755 str r6, [r5, #16] - ldr r0, .L2686+4 - str r6, [r4, #480] + ldr r0, .L2757+4 + str r6, [r4, #488] bl printk -.L2684: - ldr r3, [r4, #480] +.L2755: + ldr r3, [r4, #488] mov r0, #2 - ldr r4, .L2686 + ldr r4, .L2757 cmp r3, #0 - ldrne r2, .L2686+8 - ldrne r3, .L2686 - ldr r1, [r4, #1004] - strne r2, [r3, #476] + ldrne r2, .L2757+8 + ldrne r3, .L2757 + ldr r1, [r4, #1012] + strne r2, [r3, #484] bl StorageSysDataLoad - ldr r1, [r4, #1008] + ldr r1, [r4, #1016] mov r0, #3 bl StorageSysDataLoad ldmfd sp!, {r3, r4, r5, r6, r7, lr} b rknand_sys_storage_init -.L2687: +.L2758: .align 2 -.L2686: - .word .LANCHOR2 - .word .LC183 +.L2757: + .word .LANCHOR4 + .word .LC203 .word -1067903959 .fnend .size rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init @@ -23306,83 +24169,83 @@ rk_ftl_vendor_storage_init: .save {r3, r4, r5, r6, r7, r8, sl, lr} mov r0, #65536 bl ftl_malloc - ldr r7, .L2697 + ldr r7, .L2768 cmp r0, #0 - str r0, [r7, #1012] - beq .L2695 - ldr sl, .L2697+4 + str r0, [r7, #1020] + beq .L2766 + ldr sl, .L2768+4 mov r6, #0 mov r4, r6 mov r5, r6 movw r8, #65532 -.L2693: - ldr r0, [r7, #1012] +.L2764: + ldr r0, [r7, #1020] mov r1, r5, asl #7 mov r2, #0 - bl rk_ftl_vendor_ops.constprop.26 + bl rk_ftl_vendor_ops.constprop.28 cmp r0, #0 - bne .L2691 - ldr r3, [r7, #1012] - ldr r0, .L2697+8 + bne .L2762 + ldr r3, [r7, #1020] + ldr r0, .L2768+8 ldr r1, [r3, #0] ldr r2, [r3, r8] ldr r3, [r3, #4] bl printk - ldr r0, [r7, #1012] + ldr r0, [r7, #1020] ldr r3, [r0, #0] cmp r3, sl - bne .L2692 + bne .L2763 ldr r3, [r0, r8] ldr r2, [r0, #4] cmp r3, r2 - bne .L2692 + bne .L2763 cmp r4, r3 movcc r6, r5 movcc r4, r3 -.L2692: +.L2763: add r5, r5, #1 cmp r5, #2 - bne .L2693 + bne .L2764 cmp r4, #0 - beq .L2694 + beq .L2765 mov r1, r6, asl #7 mov r2, #0 - bl rk_ftl_vendor_ops.constprop.26 + bl rk_ftl_vendor_ops.constprop.28 cmp r0, #0 ldmeqfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} - b .L2691 -.L2694: + b .L2762 +.L2765: mov r1, #65536 bl __memzero - ldr r3, .L2697 - ldr r1, .L2697+4 + ldr r3, .L2768 + ldr r1, .L2768+4 mov r2, #1 mov r0, r4 - ldr r3, [r3, #1012] + ldr r3, [r3, #1020] stmia r3, {r1, r2} movw r1, #65532 str r2, [r3, r1] - ldr r2, .L2697+12 + ldr r2, .L2768+12 strh r4, [r3, #12] @ movhi strh r2, [r3, #14] @ movhi ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L2691: - ldr r4, .L2697 - ldr r0, [r4, #1012] +.L2762: + ldr r4, .L2768 + ldr r0, [r4, #1020] bl kfree mov r3, #0 mvn r0, #0 - str r3, [r4, #1012] + str r3, [r4, #1020] ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L2695: +.L2766: mvn r0, #11 ldmfd sp!, {r3, r4, r5, r6, r7, r8, sl, pc} -.L2698: +.L2769: .align 2 -.L2697: - .word .LANCHOR2 +.L2768: + .word .LANCHOR4 .word 1380668996 - .word .LC184 + .word .LC204 .word -1032 .fnend .size rk_ftl_vendor_storage_init, .-rk_ftl_vendor_storage_init @@ -23395,21 +24258,21 @@ rk_ftl_vendor_read: @ frame_needed = 0, uses_anonymous_args = 0 mov r3, r0 mov r0, r1 - ldr r1, .L2706 + ldr r1, .L2777 stmfd sp!, {r4, r5, r6, lr} .save {r4, r5, r6, lr} - ldr ip, [r1, #1012] + ldr ip, [r1, #1020] cmp ip, #0 ldrneh r4, [ip, #10] movne r5, ip movne r1, #0 - bne .L2701 - b .L2705 -.L2703: + bne .L2772 + b .L2776 +.L2774: ldrh r6, [r5, #16] add r5, r5, #8 cmp r6, r3 - bne .L2702 + bne .L2773 add r1, r1, #2 add r1, ip, r1, asl #3 ldrh r4, [r1, #4] @@ -23422,20 +24285,20 @@ rk_ftl_vendor_read: bl memcpy mov r0, r4 ldmfd sp!, {r4, r5, r6, pc} -.L2702: +.L2773: add r1, r1, #1 -.L2701: +.L2772: cmp r1, r4 - bcc .L2703 + bcc .L2774 mvn r0, #0 ldmfd sp!, {r4, r5, r6, pc} -.L2705: +.L2776: mvn r0, #0 ldmfd sp!, {r4, r5, r6, pc} -.L2707: +.L2778: .align 2 -.L2706: - .word .LANCHOR2 +.L2777: + .word .LANCHOR4 .fnend .size rk_ftl_vendor_read, .-rk_ftl_vendor_read .align 2 @@ -23445,46 +24308,46 @@ rk_ftl_vendor_write: .fnstart @ args = 0, pretend = 0, frame = 16 @ frame_needed = 0, uses_anonymous_args = 0 - ldr r3, .L2725 + ldr r3, .L2796 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} .save {r4, r5, r6, r7, r8, r9, sl, fp, lr} mov sl, r0 - ldr r4, [r3, #1012] + ldr r4, [r3, #1020] .pad #20 sub sp, sp, #20 mov r9, r1 mov r5, r2 cmp r4, #0 - beq .L2721 + beq .L2792 add r8, r2, #63 ldrh r2, [r4, #8] ldrh r3, [r4, #10] bic r8, r8, #63 mov r7, #0 str r2, [sp, #8] - b .L2710 -.L2717: + b .L2781 +.L2788: add r2, r7, #2 mov r2, r2, asl #3 add r6, r4, r2 ldrh r2, [r4, r2] cmp r2, sl - bne .L2711 + bne .L2782 ldrh r2, [r6, #4] add r2, r2, #63 bic r2, r2, #63 str r2, [sp, #12] cmp r5, r2 - bls .L2712 + bls .L2783 ldrh r2, [r4, #14] cmp r2, r8 - bcc .L2721 + bcc .L2792 sub r3, r3, #1 mov fp, r8 ldrh r6, [r6, #2] mov r8, r3 - b .L2713 -.L2714: + b .L2784 +.L2785: add r7, r7, #1 mov r2, r2, asl #3 add r0, r7, #2 @@ -23509,10 +24372,10 @@ rk_ftl_vendor_write: bl memcpy ldr r3, [sp, #4] add r6, r6, r3 -.L2713: +.L2784: cmp r7, r8 add r2, r7, #2 - bcc .L2714 + bcc .L2785 mov r2, r2, asl #3 uxth r6, r6 add r3, r4, r2 @@ -23532,8 +24395,8 @@ rk_ftl_vendor_write: add r3, r2, r3 rsb r8, r8, r3 strh r8, [r4, #14] @ movhi - b .L2724 -.L2712: + b .L2795 +.L2783: ldrh r0, [r6, #2] mov r1, r9 mov r2, r5 @@ -23541,15 +24404,15 @@ rk_ftl_vendor_write: add r0, r4, r0 bl memcpy strh r5, [r6, #4] @ movhi - b .L2724 -.L2711: + b .L2795 +.L2782: add r7, r7, #1 -.L2710: +.L2781: cmp r7, r3 - bcc .L2717 + bcc .L2788 ldrh r2, [r4, #14] cmp r2, r8 - bcc .L2721 + bcc .L2792 add r3, r3, #2 uxth r8, r8 mov r1, r9 @@ -23573,7 +24436,7 @@ rk_ftl_vendor_write: ldrh r3, [r4, #10] add r3, r3, #1 strh r3, [r4, #10] @ movhi -.L2724: +.L2795: ldr r3, [r4, #4] movw r2, #65532 mov r0, r4 @@ -23590,18 +24453,18 @@ rk_ftl_vendor_write: strhih r3, [r4, #8] @ movhi ldr r3, [sp, #8] mov r1, r3, asl #7 - bl rk_ftl_vendor_ops.constprop.26 + bl rk_ftl_vendor_ops.constprop.28 mov r0, #0 - b .L2709 -.L2721: + b .L2780 +.L2792: mvn r0, #0 -.L2709: +.L2780: add sp, sp, #20 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -.L2726: +.L2797: .align 2 -.L2725: - .word .LANCHOR2 +.L2796: + .word .LANCHOR4 .fnend .size rk_ftl_vendor_write, .-rk_ftl_vendor_write .align 2 @@ -23619,30 +24482,30 @@ rk_ftl_vendor_storage_ioctl: bl ftl_malloc subs r4, r0, #0 mvneq r5, #0 - beq .L2728 - ldr r3, .L2744 + beq .L2799 + ldr r3, .L2815 cmp r6, r3 - beq .L2730 + beq .L2801 add r3, r3, #1 cmp r6, r3 - bne .L2741 - b .L2743 -.L2730: + bne .L2812 + b .L2814 +.L2801: mov r1, r5 mov r2, #8 bl rk_copy_from_user cmp r0, #0 - bne .L2741 + bne .L2812 ldr r2, [r4, #0] - ldr r3, .L2744+4 + ldr r3, .L2815+4 cmp r2, r3 - bne .L2740 + bne .L2811 ldrh r0, [r4, #4] add r1, r4, #8 ldrh r2, [r4, #6] bl rk_ftl_vendor_read cmn r0, #1 - beq .L2736 + beq .L2807 uxth r2, r0 mov r1, r4 strh r2, [r4, #6] @ movhi @@ -23652,48 +24515,48 @@ rk_ftl_vendor_storage_ioctl: cmp r0, #0 moveq r5, r0 mvnne r5, #13 - b .L2729 -.L2743: + b .L2800 +.L2814: mov r1, r5 mov r2, #8 bl rk_copy_from_user cmp r0, #0 - bne .L2741 + bne .L2812 ldr r2, [r4, #0] - ldr r3, .L2744+4 + ldr r3, .L2815+4 cmp r2, r3 - bne .L2740 + bne .L2811 ldrh r2, [r4, #6] movw r3, #4087 cmp r2, r3 - bhi .L2740 + bhi .L2811 mov r0, r4 mov r1, r5 add r2, r2, #8 bl rk_copy_from_user cmp r0, #0 - bne .L2741 + bne .L2812 ldrh r0, [r4, #4] add r1, r4, #8 ldrh r2, [r4, #6] bl rk_ftl_vendor_write -.L2736: +.L2807: mov r5, r0 - b .L2729 -.L2740: + b .L2800 +.L2811: mvn r5, #0 - b .L2729 -.L2741: + b .L2800 +.L2812: mvn r5, #13 -.L2729: +.L2800: mov r0, r4 bl kfree -.L2728: +.L2799: mov r0, r5 ldmfd sp!, {r4, r5, r6, pc} -.L2745: +.L2816: .align 2 -.L2744: +.L2815: .word 1074034177 .word 1448232273 .fnend @@ -23712,6 +24575,7 @@ rk_ftl_vendor_storage_ioctl: .global RK29_NANDC1_REG_BASE .global RK29_NANDC_REG_BASE .global gc_ink_free_return_value + .global check_valid_page_count_table .global FtlUpdateVaildLpnCount .global g_ect_tbl_power_up_flush .global last_cache_match_count @@ -23939,23 +24803,35 @@ rk_ftl_vendor_storage_ioctl: .global read_retry_cur_offset .section .rodata .set .LANCHOR3,. + 0 - .type __func__.14459, %object - .size __func__.14459, 11 -__func__.14459: + .type __func__.14466, %object + .size __func__.14466, 11 +__func__.14466: .ascii "FtlMemInit\000" .LC0: .byte 60 .byte 40 .byte 24 .byte 16 - .type __func__.15408, %object - .size __func__.15408, 21 -__func__.15408: + .type __func__.15268, %object + .size __func__.15268, 16 +__func__.15268: + .ascii "FtlScanAllBlock\000" + .type __func__.15249, %object + .size __func__.15249, 17 +__func__.15249: + .ascii "FtlDumpBlockInfo\000" + .type __func__.15516, %object + .size __func__.15516, 21 +__func__.15516: .ascii "FtlVpcCheckAndModify\000" - .type __func__.14532, %object - .size __func__.14532, 8 -__func__.14532: + .type __func__.14539, %object + .size __func__.14539, 8 +__func__.14539: .ascii "FtlInit\000" + .type __func__.15213, %object + .size __func__.15213, 12 +__func__.15213: + .ascii "FtlCheckVpc\000" .section .rodata.str1.1,"aMS",%progbits,1 .LC1: .ascii "FlashEraseBlocks pageAddr error %x\012\000" @@ -24092,9 +24968,9 @@ __func__.14532: .LC66: .ascii "WR_CHK = 0x%x %x %x %x\012\000" .LC67: - .ascii "Read Err Cnt = 0x%x\012\000" + .ascii "Read Err = 0x%x\012\000" .LC68: - .ascii "Prog Err Cnt = 0x%x\012\000" + .ascii "Prog Err = 0x%x\012\000" .LC69: .ascii "gc_free_blk_th= 0x%x\012\000" .LC70: @@ -24116,7 +24992,7 @@ __func__.14532: .LC78: .ascii "%s\012\000" .LC79: - .ascii "FTL version: 5.0.48 20180528\000" + .ascii "FTL version: 5.0.48 20180703\000" .LC80: .ascii "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x" .ascii "\012\000" @@ -24162,174 +25038,220 @@ __func__.14532: .LC100: .ascii "FtlGcScanTempBlkError ID %x %x!!!!!!!\012\000" .LC101: - .ascii "prog error: = %x\012\000" + .ascii "...%s enter...\012\000" .LC102: - .ascii "prog read error: = %x\012\000" + .ascii "blk = %x vpc=%x mode = %x\012\000" .LC103: - .ascii "prog read s error: = %x %x %x\012\000" + .ascii "mlc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " + .ascii "%x\012\000" .LC104: - .ascii "prog read d error: = %x %x %x\012\000" + .ascii "slc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " + .ascii "%x\012\000" .LC105: - .ascii "FtlVpcTblFlush error = %x error count = %d\012\000" + .ascii "superBlkID = %x vpc=%x\012\000" .LC106: - .ascii "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\012\000" + .ascii "flashmode = %x pagenum = %x %x\012\000" .LC107: - .ascii "FtlBbmTblFlush error:%x\012\000" + .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\012" + .ascii "\000" .LC108: - .ascii "FtlBbmTblFlush error = %x error count = %d\012\000" + .ascii "prog error: = %x\012\000" .LC109: - .ascii "FtlGcFreeBadSuperBlk 0x%x\012\000" + .ascii "prog read error: = %x\012\000" .LC110: - .ascii "decrement_vpc_count %x = %d\012\000" + .ascii "prog read s error: = %x %x %x\012\000" .LC111: - .ascii "FlashMakeFactorBbt %d\012\000" + .ascii "prog read d error: = %x %x %x\012\000" .LC112: - .ascii "bad block:%d %d\012\000" + .ascii "FtlVpcTblFlush error = %x error count = %d\012\000" .LC113: - .ascii "FMFB:%d %d\012\000" + .ascii "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\012\000" .LC114: - .ascii "E:bad block:%d\012\000" + .ascii "FtlBbmTblFlush error:%x\012\000" .LC115: - .ascii "FMFB:Save %d %d\012\000" + .ascii "FtlBbmTblFlush error = %x error count = %d\012\000" .LC116: - .ascii "ftl_map_blk_gc blk info: %x %x %x\012\000" + .ascii "FtlGcFreeBadSuperBlk 0x%x\012\000" .LC117: - .ascii "page map lost: %x %x\012\000" + .ascii "decrement_vpc_count %x = %d\012\000" .LC118: - .ascii "FtlMapWritePage error = %x\012\000" + .ascii "FlashMakeFactorBbt %d\012\000" .LC119: - .ascii "FtlMapWritePage error = %x error count = %d\012\000" + .ascii "bad block:%d %d\012\000" .LC120: - .ascii "FtlVendorPartRead refresh = %x phyAddr = %x\012\000" + .ascii "FMFB:%d %d\012\000" .LC121: - .ascii "slc mode\000" + .ascii "E:bad block:%d\012\000" .LC122: - .ascii "no ect\000" + .ascii "FMFB:Save %d %d\012\000" .LC123: - .ascii "load_l2p_region refresh = %x phyAddr = %x\012\000" + .ascii "ftl_map_blk_gc blk info: %x %x %x\012\000" .LC124: - .ascii "page map lost %x %x %x %x\012\000" + .ascii "page map lost: %x %x\012\000" .LC125: - .ascii "RSB refresh addr %x\012\000" + .ascii "FtlMapWritePage error = %x\012\000" .LC126: - .ascii "spuer block %x vpn is 0\012 \000" + .ascii "FtlMapWritePage error = %x error count = %d\012\000" .LC127: - .ascii "g_recovery_ppa %x ver %x\012 \000" + .ascii "FtlVendorPartRead refresh = %x phyAddr = %x\012\000" .LC128: - .ascii "...%s enter...\012\000" + .ascii "slc mode\000" .LC129: - .ascii "FtlCheckVpc %x = %x %x\012\000" + .ascii "no ect\000" .LC130: - .ascii "%d GC datablk = %x vpc %x %x\012\000" + .ascii "FLFB:%d %d\012\000" .LC131: - .ascii "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\012\000" + .ascii "phyBlk = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" + .ascii "\000" .LC132: - .ascii "Ftlwrite decrement_vpc_count %x = %d\012\000" + .ascii "Mblk:\000" .LC133: - .ascii "GC des block %x done\012\000" + .ascii "L2P:\000" .LC134: - .ascii "rk_ftl_de_init %x\012\000" + .ascii "L2PC:\000" .LC135: - .ascii "fix power lost blk = %x vpc=%x\012\000" + .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data = %x\012" + .ascii "\000" .LC136: - .ascii "erase power lost blk = %x vpc=%x\012\000" + .ascii ":\000" .LC137: - .ascii "...%s: no bad block mapping table, format device\012" - .ascii "\000" + .ascii "BBT:\000" .LC138: - .ascii "...%s FtlSysBlkInit error ,format device!\012\000" + .ascii "load_l2p_region refresh = %x phyAddr = %x\012\000" .LC139: - .ascii "FtlWrite: lpa error:%x %x\012\000" + .ascii "region_id = %x phyAddr = %x\012\000" .LC140: - .ascii "FLFB:%d %d\012\000" + .ascii "map_ppn:\000" .LC141: - .ascii "BBT:\000" + .ascii "Ftlscanalldata = %x\012\000" .LC142: - .ascii "otp error! %d\000" + .ascii "scan lpa = %x ppa= %x\012\000" .LC143: - .ascii "rr\000" + .ascii "lba = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" + .ascii "\000" .LC144: - .ascii "FlashLoadPhyInfo fail %x!!\012\000" + .ascii "RSB refresh addr %x\012\000" .LC145: - .ascii "FtlInit %x\012\000" + .ascii "spuer block %x vpn is 0\012 \000" .LC146: - .ascii "IdBlockReadData %x %x\012\000" + .ascii "g_recovery_ppa %x ver %x\012 \000" .LC147: - .ascii "IdBlockReadData %x %x ret= %x\012\000" + .ascii "FtlCheckVpc %x = %x %x\012\000" .LC148: - .ascii "IDBlockWriteData %x %x\012\000" + .ascii "GC des block %x done\012\000" .LC149: - .ascii "IDBlockWriteData %x %x ret= %x\012\000" + .ascii "%d GC datablk = %x vpc %x %x\012\000" .LC150: - .ascii "write_idblock fix data %x %x\012\000" + .ascii "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\012\000" .LC151: - .ascii "idblk:\000" + .ascii "Ftlwrite decrement_vpc_count %x = %d\012\000" .LC152: - .ascii "idb reverse %x %x\012\000" + .ascii "rk_ftl_de_init %x\012\000" .LC153: - .ascii "write_idblock totle_sec %x %x %x %x\012\000" + .ascii "fix power lost blk = %x vpc=%x\012\000" .LC154: + .ascii "erase power lost blk = %x vpc=%x\012\000" +.LC155: + .ascii "...%s: no bad block mapping table, format device\012" + .ascii "\000" +.LC156: + .ascii "...%s FtlSysBlkInit error ,format device!\012\000" +.LC157: + .ascii "FtlWrite: lpa error:%x %x\012\000" +.LC158: + .ascii "vpc1\000" +.LC159: + .ascii "vpc2\000" +.LC160: + .ascii "FtlCheckVpc2 %x = %x %x\012\000" +.LC161: + .ascii "free blk vpc error %x = %x %x\012\000" +.LC162: + .ascii "otp error! %d\000" +.LC163: + .ascii "rr\000" +.LC164: + .ascii "FlashLoadPhyInfo fail %x!!\012\000" +.LC165: + .ascii "FtlInit %x\012\000" +.LC166: + .ascii "IdBlockReadData %x %x\012\000" +.LC167: + .ascii "IdBlockReadData %x %x ret= %x\012\000" +.LC168: + .ascii "IDBlockWriteData %x %x\012\000" +.LC169: + .ascii "IDBlockWriteData %x %x ret= %x\012\000" +.LC170: + .ascii "write_idblock fix data %x %x\012\000" +.LC171: + .ascii "idblk:\000" +.LC172: + .ascii "idb reverse %x %x\012\000" +.LC173: + .ascii "write_idblock totle_sec %x %x %x %x\012\000" +.LC174: .ascii "write and check error:%d idb=%x,offset=%x,r=%x,w=%x" .ascii "\012\000" -.LC155: +.LC175: .ascii "write\000" -.LC156: +.LC176: .ascii "read\000" -.LC157: +.LC177: .ascii "write_idblock error %d\012\000" -.LC158: +.LC178: .ascii "READ_SECTOR_IO\012\000" -.LC159: +.LC179: .ascii "rk_copy_from_user error\012\000" -.LC160: +.LC180: .ascii "READ_SECTOR_IO %x %x\012\000" -.LC161: +.LC181: .ascii "rk_copy_to_user error\012\000" -.LC162: +.LC182: .ascii "WRITE_SECTOR_IO\012\000" -.LC163: +.LC183: .ascii "WRITE_SECTOR_IO %x %x\012\000" -.LC164: +.LC184: .ascii "END_WRITE_SECTOR_IO\012\000" -.LC165: +.LC185: .ascii "END_WRITE_SECTOR_IO %x %x\012\000" -.LC166: +.LC186: .ascii "GET_FLASH_INFO_IO\012\000" -.LC167: +.LC187: .ascii "GET_BAD_BLOCK_IO\012\000" -.LC168: +.LC188: .ascii "bbt:\000" -.LC169: +.LC189: .ascii "GET_LOCK_FLAG_IO\012\000" -.LC170: +.LC190: .ascii "GET_PUBLIC_KEY_IO\012\000" -.LC171: +.LC191: .ascii "RKNAND_GET_DRM_KEY\012\000" -.LC172: +.LC192: .ascii "RKNAND_STORE_DRM_KEY\012\000" -.LC173: +.LC193: .ascii "RKNAND_DIASBLE_SECURE_BOOT\012\000" -.LC174: +.LC194: .ascii "RKNAND_ENASBLE_SECURE_BOOT\012\000" -.LC175: +.LC195: .ascii "RKNAND_GET_SN_SECTOR\012\000" -.LC176: +.LC196: .ascii "RKNAND_LOADER_UNLOCK\012\000" -.LC177: +.LC197: .ascii "RKNAND_LOADER_STATUS\012\000" -.LC178: +.LC198: .ascii "RKNAND_LOADER_LOCK\012\000" -.LC179: +.LC199: .ascii "LockKey not match %d\012\000" -.LC180: +.LC200: .ascii "RKNAND_GET_VENDOR_SECTOR\012\000" -.LC181: +.LC201: .ascii "RKNAND_STORE_VENDOR_SECTOR\012\000" -.LC182: +.LC202: .ascii "return ret = %lx\012\000" -.LC183: +.LC203: .ascii "secureBootEn check error\012\000" -.LC184: +.LC204: .ascii "\0013vendor storage %x,%x,%x\012\000" .data .align 2 @@ -27056,6 +27978,7 @@ gTable_Crc32: .align 2 .set .LANCHOR0,. + 0 .set .LANCHOR2,. + 8184 + .set .LANCHOR4,. + 16368 .type gReadRetryInfo, %object .size gReadRetryInfo, 852 gReadRetryInfo: @@ -27393,10 +28316,6 @@ g_MaxLpn: .size gBbtInfo, 60 gBbtInfo: .space 60 - .type gSysFreeQueue, %object - .size gSysFreeQueue, 2056 -gSysFreeQueue: - .space 2056 .type g_flash_read_only_en, %object .size g_flash_read_only_en, 4 g_flash_read_only_en: @@ -27413,6 +28332,10 @@ p_erase_count_table: .size g_totle_sys_slc_erase_count, 4 g_totle_sys_slc_erase_count: .space 4 + .type gSysFreeQueue, %object + .size gSysFreeQueue, 2056 +gSysFreeQueue: + .space 2056 .type g_sys_save_data, %object .size g_sys_save_data, 48 g_sys_save_data: @@ -27942,14 +28865,14 @@ g_gc_cur_blk_max_valid_pages: .type gp_last_act_superblock, %object .size gp_last_act_superblock, 4 gp_last_act_superblock: - .space 4 - .type gc_discard_updated, %object - .size gc_discard_updated, 4 -gc_discard_updated: .space 4 .type g_LowFormat, %object .size g_LowFormat, 4 g_LowFormat: + .space 4 + .type gc_discard_updated, %object + .size gc_discard_updated, 4 +gc_discard_updated: .space 4 .type g_ftl_nand_free_count, %object .size g_ftl_nand_free_count, 4 @@ -27959,6 +28882,10 @@ g_ftl_nand_free_count: .size last_cache_match_count, 4 last_cache_match_count: .space 4 + .type check_valid_page_count_table, %object + .size check_valid_page_count_table, 8192 +check_valid_page_count_table: + .space 8192 .type gLoaderBootInfo, %object .size gLoaderBootInfo, 4 gLoaderBootInfo: diff --git a/drivers/rk_nand/rk_ftlv5_arm64.S b/drivers/rk_nand/rk_ftlv5_arm64.S index 3b00f1785f9a1..379404130efdf 100644 --- a/drivers/rk_nand/rk_ftlv5_arm64.S +++ b/drivers/rk_nand/rk_ftlv5_arm64.S @@ -5,7 +5,7 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * date: 2018-06-15 + * date: 2018-07-03 * function: rk ftl v5 for rockchip soc base on arm v8 to support MLC NAND. */ .cpu generic+fp+simd @@ -1857,6 +1857,40 @@ SandiskSetRRPara: ret .size SandiskSetRRPara, .-SandiskSetRRPara .align 2 + .global micron_auto_read_calibration_config + .type micron_auto_read_calibration_config, %function +micron_auto_read_calibration_config: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + str x19, [sp,16] + uxtb w19, w0 + mov w0, w19 + sbfiz x19, x19, 4, 32 + str x1, [x29,40] + bl NandcWaitFlashReady + adrp x3, .LANCHOR0 + add x3, x3, :lo12:.LANCHOR0 + add x3, x3, 40 + add x0, x3, x19 + ldr x19, [x3,x19] + ldrb w2, [x0,8] + mov w0, 239 + add x19, x19, x2, lsl 8 + str w0, [x19,2056] + mov w0, 150 + str w0, [x19,2052] + mov w0, 200 + bl NandcDelayns + ldr x1, [x29,40] + str w1, [x19,2048] + str wzr, [x19,2048] + str wzr, [x19,2048] + str wzr, [x19,2048] + ldr x19, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size micron_auto_read_calibration_config, .-micron_auto_read_calibration_config + .align 2 .global FlashEraseSLc2KBlocks .type FlashEraseSLc2KBlocks, %function FlashEraseSLc2KBlocks: @@ -1874,9 +1908,9 @@ FlashEraseSLc2KBlocks: mov w22, 0 add x25, x21, 1720 add x23, x23, :lo12:.LC1 -.L260: +.L261: cmp w22, w24 - beq .L269 + beq .L270 add x2, x29, 88 sub w4, w24, w22 mov x0, x20 @@ -1886,11 +1920,11 @@ FlashEraseSLc2KBlocks: ldr w2, [x29,92] ldrb w0, [x21,1676] cmp w2, w0 - bcc .L261 + bcc .L262 mov w0, -1 str w0, [x20] - b .L262 -.L261: + b .L263 +.L262: uxtw x2, w2 add x0, x21, x2 ldrb w19, [x0,1680] @@ -1923,24 +1957,24 @@ FlashEraseSLc2KBlocks: ldr w1, [x29,88] mov w0, w19 bl FlashReadStatus - tbz x0, 0, .L263 + tbz x0, 0, .L264 mov w0, -1 str w0, [x20] -.L263: +.L264: ldr w0, [x20] cmn w0, #1 - bne .L264 + bne .L265 ldr w1, [x29,88] mov x0, x23 bl printk -.L264: +.L265: mov w0, w19 bl NandcFlashDeCs -.L262: +.L263: add w22, w22, 1 add x20, x20, 56 - b .L260 -.L269: + b .L261 +.L270: mov w0, 0 ldr x25, [sp,64] ldp x19, x20, [sp,16] @@ -1974,16 +2008,16 @@ HynixGetReadRetryDefault: mov w0, -81 strb w3, [x1,6] strb w0, [x1,7] - bne .L271 + bne .L272 mov w0, -89 strb w0, [x1,4] adrp x0, .LANCHOR1+3017 mov w1, -9 strb w1, [x0,#:lo12:.LANCHOR1+3017] - b .L326 -.L271: + b .L327 +.L272: cmp w26, 3 - bne .L273 + bne .L274 mov w0, -80 strb w0, [x1,4] mov w0, -79 @@ -1999,10 +2033,10 @@ HynixGetReadRetryDefault: mov w0, -74 strb w0, [x1,10] mov w0, -73 - b .L359 -.L273: + b .L360 +.L274: cmp w26, 4 - bne .L274 + bne .L275 mov w5, -52 strb w5, [x1,4] mov w5, -65 @@ -2015,14 +2049,14 @@ HynixGetReadRetryDefault: mov w5, -51 strb w3, [x1,10] strb w5, [x1,8] -.L359: +.L360: mov w27, 8 strb w0, [x1,11] mov w28, w27 - b .L272 -.L274: + b .L273 +.L275: cmp w26, 5 - bne .L275 + bne .L276 mov w0, 56 strb w0, [x1,4] mov w0, 57 @@ -2032,10 +2066,10 @@ HynixGetReadRetryDefault: strb w0, [x1,6] mov w0, 59 strb w0, [x1,7] - b .L358 -.L275: + b .L359 +.L276: cmp w26, 6 - bne .L276 + bne .L277 mov w0, 14 strb w0, [x1,4] mov w0, 15 @@ -2045,10 +2079,10 @@ HynixGetReadRetryDefault: strb w0, [x1,6] mov w0, 17 strb w0, [x1,7] - b .L358 -.L276: + b .L359 +.L277: cmp w26, 7 - bne .L326 + bne .L327 mov w0, -80 strb w0, [x1,4] mov w0, -79 @@ -2071,15 +2105,15 @@ HynixGetReadRetryDefault: mov w28, 10 mov w0, -43 strb w0, [x1,13] - b .L272 -.L326: + b .L273 +.L327: mov w27, 7 -.L358: +.L359: mov w28, 4 -.L272: +.L273: sub w0, w26, #1 cmp w0, 1 - bhi .L355 + bhi .L356 adrp x22, .LANCHOR1 add x25, x20, :lo12:.LANCHOR0 add x22, x22, :lo12:.LANCHOR1 @@ -2087,10 +2121,10 @@ HynixGetReadRetryDefault: add x26, x25, 4056 add x3, x25, 40 add x22, x22, 3000 -.L277: +.L278: ldrb w0, [x25,1676] cmp w0, w21 - bls .L284 + bls .L285 add x0, x25, x21, sxtw ldrb w0, [x0,1680] mov x23, 0 @@ -2102,7 +2136,7 @@ HynixGetReadRetryDefault: ldrb w0, [x1,8] mov w1, 55 add x24, x24, x0, lsl 8 -.L279: +.L280: add x0, x26, x23 str w1, [x24,2056] str x3, [x29,128] @@ -2117,12 +2151,12 @@ HynixGetReadRetryDefault: ldr x1, [x29,136] cmp w28, w23, uxtb ldr x3, [x29,128] - bhi .L279 + bhi .L280 mov x0, 0 -.L280: +.L281: add w2, w0, 8 mov x1, 0 -.L281: +.L282: add x5, x1, x0 add x1, x1, 4 add x5, x22, x5 @@ -2132,10 +2166,10 @@ HynixGetReadRetryDefault: add w5, w6, w5 strb w5, [x19,w2,sxtw] add w2, w2, 8 - bne .L281 + bne .L282 add x0, x0, 1 cmp x0, 4 - bne .L280 + bne .L281 add w21, w21, 1 strb wzr, [x19,16] strb wzr, [x19,24] @@ -2145,11 +2179,11 @@ HynixGetReadRetryDefault: strb wzr, [x19,48] strb wzr, [x19,41] strb wzr, [x19,49] - b .L277 -.L355: + b .L278 +.L356: sub w0, w26, #3 cmp w0, 4 - bhi .L284 + bhi .L285 mul w25, w28, w27 sub w23, w28, #1 mov w21, 0 @@ -2165,11 +2199,11 @@ HynixGetReadRetryDefault: str x0, [x29,128] sub w0, w26, #5 str w0, [x29,136] -.L285: +.L286: ldrb w0, [x25,1676] cmp w0, w21 - bhi .L325 -.L284: + bhi .L326 +.L285: add x20, x20, :lo12:.LANCHOR0 ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -2180,7 +2214,7 @@ HynixGetReadRetryDefault: ldp x27, x28, [sp,80] ldp x29, x30, [sp], 144 ret -.L325: +.L326: add x0, x25, x21, sxtw ldrb w1, [x0,1680] str x1, [x29,112] @@ -2198,42 +2232,42 @@ HynixGetReadRetryDefault: cmp w26, 7 add x6, x25, 4056 ldr x1, [x29,112] - beq .L286 + beq .L287 add x1, x6, x1, lsl 6 add x6, x1, 20 - b .L287 -.L286: + b .L288 +.L287: mov x0, 160 madd x1, x1, x0, x6 add x6, x1, 28 -.L287: +.L288: mov w0, 54 cmp w26, 4 str w0, [x19,2056] - bne .L288 + bne .L289 mov w0, 255 str w0, [x19,2052] mov w0, 64 str w0, [x19,2048] mov w0, 204 - b .L360 -.L288: + b .L361 +.L289: ldr w0, [x29,136] cmp w0, 1 - bhi .L290 + bhi .L291 ldrb w0, [x25,4060] str w0, [x19,2052] mov w0, 82 - b .L361 -.L290: + b .L362 +.L291: mov w0, 174 str w0, [x19,2052] str wzr, [x19,2048] mov w0, 176 -.L360: +.L361: str w0, [x19,2052] mov w0, 77 -.L361: +.L362: str w0, [x19,2048] mov w0, 22 str w0, [x19,2056] @@ -2247,13 +2281,13 @@ HynixGetReadRetryDefault: str wzr, [x19,2056] str wzr, [x19,2052] str wzr, [x19,2052] - bne .L291 + bne .L292 mov w0, 31 str w0, [x19,2052] - b .L292 -.L291: - str wzr, [x19,2052] + b .L293 .L292: + str wzr, [x19,2052] +.L293: mov w7, 2 str w7, [x19,2052] str wzr, [x19,2052] @@ -2267,85 +2301,85 @@ HynixGetReadRetryDefault: mov w1, 16 ldr x6, [x29,104] cmp w0, 1 - bls .L294 + bls .L295 ldr x7, [x29,112] cmp w26, 7 mov w1, 32 csel w1, w1, w7, eq -.L294: +.L295: ldr x0, [x25] mov x7, 0 -.L295: +.L296: ldr w8, [x19,2048] strb w8, [x0,x7] add x7, x7, 1 cmp w1, w7, uxtb - bhi .L295 + bhi .L296 cmp w26, 7 - bne .L296 + bne .L297 mov w1, 0 -.L298: +.L299: ldrb w7, [x0] cmp w7, 12 - beq .L297 + beq .L298 ldrb w7, [x0,1] cmp w7, 10 - beq .L297 + beq .L298 add w1, w1, 1 add x0, x0, 4 uxtb w1, w1 cmp w1, 8 - bne .L298 - b .L299 -.L297: + bne .L299 + b .L300 +.L298: cmp w1, 7 - bne .L300 -.L299: + bne .L301 +.L300: adrp x0, .LC2 mov w1, 0 add x0, x0, :lo12:.LC2 bl printk -.L301: - b .L301 -.L296: +.L302: + b .L302 +.L297: cmp w26, 6 - bne .L300 + bne .L301 mov x1, 0 -.L302: +.L303: ldrb w7, [x0,x1] cmp w7, 12 - beq .L300 + beq .L301 add x7, x0, x1 ldrb w7, [x7,8] cmp w7, 4 - beq .L300 + beq .L301 add x1, x1, 1 cmp x1, 8 - bne .L302 + bne .L303 adrp x0, .LC2 mov w1, 0 add x0, x0, :lo12:.LC2 bl printk -.L304: - b .L304 -.L300: +.L305: + b .L305 +.L301: ldr x9, [x25] mov x0, 0 -.L305: +.L306: ldr w1, [x29,124] cmp w1, w0 - ble .L362 + ble .L363 ldr w1, [x19,2048] strb w1, [x9,x0] add x0, x0, 1 - b .L305 -.L362: + b .L306 +.L363: ldr x11, [x25] mov w8, w22 mov w7, 8 -.L308: +.L309: mov w0, 0 -.L307: +.L308: add w1, w0, w8 add w0, w0, 1 sbfiz x1, x1, 2, 32 @@ -2353,52 +2387,52 @@ HynixGetReadRetryDefault: ldr w10, [x11,x1] mvn w10, w10 str w10, [x11,x1] - bne .L307 + bne .L308 ldr w0, [x29,120] subs w7, w7, #1 add w8, w8, w0 - bne .L308 + bne .L309 mov x7, 0 mov w15, 1 -.L309: +.L310: mov w1, 0 ldr x14, [x25] mov w10, w1 -.L313: +.L314: lsl w8, w15, w10 mov w12, w7 mov w0, 16 mov w11, 0 -.L311: +.L312: ldr w13, [x14,w12,sxtw 2] add w12, w12, w22 and w13, w8, w13 cmp w13, w8 csinc w11, w11, w11, ne subs w0, w0, #1 - bne .L311 + bne .L312 cmp w11, 9 orr w8, w1, w8 add w10, w10, 1 csel w1, w8, w1, cs cmp w10, 32 - bne .L313 + bne .L314 str w1, [x14,x7,lsl 2] add x7, x7, 1 cmp w22, w7 - bgt .L309 + bgt .L310 mov x7, 0 ldr x1, [x25] mov w8, w7 -.L316: +.L317: ldr w10, [x1,x7] add x7, x7, 4 cmp w10, wzr csinc w8, w8, w8, ne cmp x7, 32 - bne .L316 + bne .L317 cmp w8, 7 - ble .L317 + ble .L318 adrp x0, .LC3 mov w2, 1 add x0, x0, :lo12:.LC3 @@ -2408,39 +2442,39 @@ HynixGetReadRetryDefault: mov w1, 0 add x0, x0, :lo12:.LC2 bl printk +.L319: + b .L319 .L318: - b .L318 -.L317: cmp w26, 6 mov w7, 4 - beq .L319 + beq .L320 cmp w26, 7 mov w7, 10 mov w1, 8 csel w7, w1, w7, ne -.L319: - mov w8, 0 .L320: - mov x1, 0 + mov w8, 0 .L321: + mov x1, 0 +.L322: add w10, w0, w1 ldrb w11, [x9,x1] add x1, x1, 1 cmp w28, w1, uxtb strb w11, [x6,w10,sxtw] - bhi .L321 + bhi .L322 add w8, w8, 1 add x9, x9, x23 cmp w8, w27 add w0, w0, w7 - blt .L320 + blt .L321 mov w0, 255 str w0, [x19,2056] mov w0, w24 bl NandcWaitFlashReady ldr w0, [x29,136] cmp w0, 1 - bhi .L323 + bhi .L324 mov w0, 54 str w0, [x19,2056] adrp x0, .LANCHOR0+4060 @@ -2452,16 +2486,16 @@ HynixGetReadRetryDefault: str w0, [x19,2056] mov w0, w21 bl FlashReadCmd - b .L324 -.L323: + b .L325 +.L324: mov w0, 56 str w0, [x19,2056] -.L324: +.L325: mov w0, w24 add w21, w21, 1 bl NandcWaitFlashReady uxtb w21, w21 - b .L285 + b .L286 .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault .align 2 .global FlashGetReadRetryDefault @@ -2470,15 +2504,15 @@ FlashGetReadRetryDefault: stp x29, x30, [sp, -16]! mov w1, w0 add x29, sp, 0 - cbz w0, .L363 + cbz w0, .L364 sub w2, w0, #1 cmp w2, 6 - bhi .L365 + bhi .L366 bl HynixGetReadRetryDefault - b .L363 -.L365: + b .L364 +.L366: cmp w0, 49 - bne .L366 + bne .L367 adrp x0, .LANCHOR0 mov w2, 64 add x0, x0, :lo12:.LANCHOR0 @@ -2491,30 +2525,30 @@ FlashGetReadRetryDefault: adrp x1, .LANCHOR1 add x1, x1, :lo12:.LANCHOR1 add x1, x1, 2936 - b .L381 -.L366: + b .L382 +.L367: sub w0, w0, #65 cmp w0, 1 - bls .L372 + bls .L373 cmp w1, 33 - bne .L367 -.L372: + bne .L368 +.L373: adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 strb w1, [x0,4056] mov w1, 4 - b .L382 -.L367: + b .L383 +.L368: cmp w1, 67 - beq .L373 + beq .L374 cmp w1, 34 - bne .L369 -.L373: + bne .L370 +.L374: adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 strb w1, [x0,4056] mov w1, 5 -.L382: +.L383: strb w1, [x0,4057] mov w1, 7 strb w1, [x0,4058] @@ -2523,13 +2557,13 @@ FlashGetReadRetryDefault: add x0, x0, 4060 add x1, x1, 2784 mov w2, 45 - b .L381 -.L369: + b .L382 +.L370: cmp w1, 68 - beq .L374 + beq .L375 cmp w1, 35 - bne .L363 -.L374: + bne .L364 +.L375: adrp x0, .LANCHOR0 mov w2, 95 add x0, x0, :lo12:.LANCHOR0 @@ -2542,9 +2576,9 @@ FlashGetReadRetryDefault: adrp x1, .LANCHOR1 add x1, x1, :lo12:.LANCHOR1 add x1, x1, 2832 -.L381: +.L382: bl ftl_memcpy -.L363: +.L364: ldp x29, x30, [sp], 16 ret .size FlashGetReadRetryDefault, .-FlashGetReadRetryDefault @@ -2574,7 +2608,7 @@ FlashReadDpCmd: cmp w0, 1 and w5, w1, 255 lsr w0, w1, 16 - bne .L384 + bne .L385 add x19, x6, x19, lsl 8 ldrb w2, [x3,8] str x1, [x29,72] @@ -2597,8 +2631,8 @@ FlashReadDpCmd: str w20, [x19,2052] str w0, [x19,2056] ldr x1, [x29,72] - b .L385 -.L384: + b .L386 +.L385: add x19, x6, x19, lsl 8 ldrb w2, [x3,8] str w2, [x19,2056] @@ -2612,7 +2646,7 @@ FlashReadDpCmd: str w22, [x19,2052] str w20, [x19,2052] str w0, [x19,2056] -.L385: +.L386: mov w0, w21 bl FlashSetRandomizer ldr x23, [sp,48] @@ -2637,21 +2671,21 @@ ftl_flash_de_init: mov w0, 12336 movk w0, 0x5638, lsl 16 cmp w1, w0 - bne .L387 + bne .L388 mov w0, 0 bl flash_enter_slc_mode -.L387: +.L388: add x19, x19, :lo12:.LANCHOR2 ldrb w0, [x19,572] - cbz w0, .L388 + cbz w0, .L389 ldrb w0, [x19,564] - tbz x0, 0, .L388 + tbz x0, 0, .L389 mov w0, 1 bl FlashSetInterfaceMode mov w0, 1 bl NandcSetMode strb wzr, [x19,572] -.L388: +.L389: adrp x0, .LANCHOR0+40 ldr x0, [x0,#:lo12:.LANCHOR0+40] str wzr, [x0,336] @@ -2688,37 +2722,37 @@ NandcTimeCfg: add x1, x1, :lo12:.LANCHOR0 sdiv w0, w0, w2 cmp w0, 250 - ble .L397 + ble .L398 ldr x0, [x1,3976] mov w1, 8354 - b .L404 -.L397: + b .L405 +.L398: cmp w0, 220 - ble .L399 + ble .L400 ldr x0, [x1,3976] - b .L405 -.L399: + b .L406 +.L400: cmp w0, 185 - ble .L400 + ble .L401 ldr x0, [x1,3976] mov w1, 4226 - b .L404 -.L400: + b .L405 +.L401: cmp w0, 160 ldr x0, [x1,3976] - ble .L401 + ble .L402 mov w1, 4194 - b .L404 -.L401: + b .L405 +.L402: cmp w19, 35 mov w1, 4193 - bls .L404 + bls .L405 cmp w19, 99 mov w1, 4225 - bls .L404 -.L405: + bls .L405 +.L406: mov w1, 8322 -.L404: +.L405: str w1, [x0,4] ldr x19, [sp,16] ldp x29, x30, [sp], 32 @@ -2734,15 +2768,15 @@ FlashTimingCfg: and w1, w1, -33 cmp w1, 1 add x29, sp, 0 - bls .L407 + bls .L408 mov w1, 8322 cmp w0, w1 - bne .L408 -.L407: + bne .L409 +.L408: adrp x1, .LANCHOR0+3976 ldr x1, [x1,#:lo12:.LANCHOR0+3976] str w0, [x1,4] -.L408: +.L409: adrp x0, .LANCHOR1+277 ldrb w0, [x0,#:lo12:.LANCHOR1+277] bl NandcTimeCfg @@ -2784,10 +2818,10 @@ NandcInit: ldr w4, [x0,352] str w4, [x3,568] cmp w4, 2049 - bne .L410 + bne .L411 mov w1, 8 str w1, [x3,580] -.L410: +.L411: add x20, x20, :lo12:.LANCHOR0 str w2, [x0] ldr x0, [x20,3976] @@ -2849,21 +2883,21 @@ NandcBchSel: adrp x1, .LANCHOR2+644 str w0, [x1,#:lo12:.LANCHOR2+644] mov w1, 4096 - bne .L413 -.L416: + bne .L414 +.L417: and w1, w1, -17 - b .L414 -.L413: + b .L415 +.L414: cmp w0, 24 - bne .L415 + bne .L416 orr w1, w1, 16 - b .L414 -.L415: + b .L415 +.L416: cmp w0, 40 orr w1, w1, 262144 orr w1, w1, 16 - beq .L416 -.L414: + beq .L417 +.L415: orr w1, w1, 1 str w1, [x2,12] ret @@ -2914,23 +2948,23 @@ ftl_flash_resume: str w3, [x2,336] ldr w1, [x1,4012] str w1, [x2,344] -.L423: +.L424: lsl x0, x19, 3 ldrb w1, [x0,x20] sub w1, w1, #1 uxtb w1, w1 cmp w1, 253 - bhi .L422 + bhi .L423 mov w0, w19 bl FlashReset -.L422: +.L423: add x19, x19, 1 cmp x19, 4 - bne .L423 + bne .L424 adrp x19, .LANCHOR2 add x19, x19, :lo12:.LANCHOR2 ldrb w0, [x19,572] - cbz w0, .L424 + cbz w0, .L425 mov w0, 1 bl NandcSetMode ldrb w0, [x19,564] @@ -2939,7 +2973,7 @@ ftl_flash_resume: bl NandcSetMode lsr w0, w21, 8 bl NandcSetDdrPara -.L424: +.L425: add x0, x22, :lo12:.LANCHOR0 ldr x0, [x0,1912] ldrb w0, [x0,20] @@ -2972,18 +3006,18 @@ NandcIqrWaitFlashReady: orr w0, w0, 2 str w0, [x19,364] ldr w0, [x19] - tbnz x0, 9, .L431 + tbnz x0, 9, .L432 mov x0, x19 bl wait_for_nand_flash_ready - b .L430 -.L431: + b .L431 +.L432: ldr w0, [x19,368] orr w0, w0, 2 str w0, [x19,368] ldr w0, [x19,364] and w0, w0, -3 str w0, [x19,364] -.L430: +.L431: ldr x19, [sp,16] ldp x29, x30, [sp], 32 ret @@ -3007,17 +3041,17 @@ FlashEraseBlocks: mov x24, x0 ldrb w2, [x20,24] mov w19, 0 - cbz w2, .L434 + cbz w2, .L435 mov w1, w23 bl FlashEraseSLc2KBlocks - b .L435 -.L434: + b .L436 +.L435: mov w27, 56 adrp x28, .LANCHOR2 add x25, x20, 1720 -.L465: +.L466: cmp w19, w23 - bcs .L466 + bcs .L467 umull x5, w19, w27 mov w1, 0 sub w4, w23, w19 @@ -3032,11 +3066,11 @@ FlashEraseBlocks: ldr w0, [x29,124] ldr x5, [x29,96] cmp w0, w1 - bcc .L436 + bcc .L437 mov w0, -1 str w0, [x24,x5] - b .L437 -.L436: + b .L438 +.L437: add x1, x28, :lo12:.LANCHOR2 mov x2, 24 ldrb w1, [x1,648] @@ -3045,9 +3079,9 @@ FlashEraseBlocks: csel w22, w22, wzr, ne madd x1, x1, x2, x25 ldr x1, [x1,8] - cbz x1, .L439 + cbz x1, .L440 bl FlashWaitCmdDone -.L439: +.L440: ldr w1, [x29,124] mov x0, 24 ldr w2, [x29,120] @@ -3055,12 +3089,12 @@ FlashEraseBlocks: str x21, [x0,8] str xzr, [x0,16] str w2, [x0,4] - cbz w22, .L440 + cbz w22, .L441 add w2, w19, 1 umull x2, w2, w27 add x2, x24, x2 str x2, [x0,16] -.L440: +.L441: add x0, x20, x1 ldrb w21, [x0,1680] mov x0, 24 @@ -3069,16 +3103,16 @@ FlashEraseBlocks: strb w21, [x25,x1] bl NandcFlashCs cmp w26, 1 - bne .L441 + bne .L442 ldrb w0, [x20,136] - cbz w0, .L441 + cbz w0, .L442 mov w0, w21 bl flash_enter_slc_mode - b .L442 -.L441: + b .L443 +.L442: mov w0, w21 bl flash_exit_slc_mode -.L442: +.L443: ldr w1, [x29,124] add x0, x20, 1688 add w19, w19, w22 @@ -3094,54 +3128,54 @@ FlashEraseBlocks: bl FlashEraseCmd mov w0, w21 bl NandcFlashDeCs -.L437: +.L438: add w19, w19, 1 - b .L465 -.L466: + b .L466 +.L467: ldr x0, [x29,104] mov x20, 0 mov x21, 24 add x19, x0, :lo12:.LANCHOR0 ldr x0, [x19,3976] bl NandcIqrWaitFlashReady -.L444: +.L445: ldrb w0, [x19,1676] cmp w0, w20 - bls .L467 + bls .L468 mov w0, w20 bl FlashWaitCmdDone cmp w26, 1 - bne .L445 + bne .L446 ldrb w0, [x19,136] - cbz w0, .L445 + cbz w0, .L446 madd x0, x20, x21, x19 ldrb w0, [x0,1720] bl flash_exit_slc_mode -.L445: +.L446: add x20, x20, 1 - b .L444 -.L467: + b .L445 +.L468: adrp x0, .LANCHOR2+652 ldr w0, [x0,#:lo12:.LANCHOR2+652] - cbnz w0, .L447 -.L449: + cbnz w0, .L448 +.L450: mov w0, 0 - b .L435 -.L447: + b .L436 +.L448: adrp x0, IDByte ldrb w0, [x0,#:lo12:IDByte] cmp w0, 69 - bne .L449 + bne .L450 mov x0, 0 mov x1, 56 -.L448: +.L449: cmp w23, w0 - bls .L449 + bls .L450 mul x2, x0, x1 add x0, x0, 1 str wzr, [x24,x2] - b .L448 -.L435: + b .L449 +.L436: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -3179,11 +3213,11 @@ NandcSendDumpDataStart: .type NandcSendDumpDataDone, %function NandcSendDumpDataDone: sub sp, sp, #16 -.L470: +.L471: ldr w1, [x0,8] str w1, [sp,8] ldr w1, [sp,8] - tbz x1, 20, .L470 + tbz x1, 20, .L471 add sp, sp, 16 ret .size NandcSendDumpDataDone, .-NandcSendDumpDataDone @@ -3224,7 +3258,7 @@ NandcXferStart: ldr w0, [x0,580] bfi w20, w3, 4, 1 cmp w0, 3 - bls .L474 + bls .L475 ldr w0, [x21,16] cmp x5, xzr str w0, [x29,88] @@ -3232,11 +3266,11 @@ NandcXferStart: ldr w0, [x29,88] and w0, w0, -5 str w0, [x29,88] - cbnz w7, .L488 - cbz x22, .L475 -.L488: - cbnz w25, .L477 -.L485: + cbnz w7, .L489 + cbz x22, .L476 +.L489: + cbnz w25, .L478 +.L486: mov x0, x21 add w23, w23, 1 asr w23, w23, 1 @@ -3249,11 +3283,11 @@ NandcXferStart: orr w0, w0, 1 str w0, [x21,364] mov x0, x22 - cbnz x22, .L479 + cbnz x22, .L480 add x0, x19, :lo12:.LANCHOR2 ldr x0, [x0,592] - b .L479 -.L477: + b .L480 +.L478: add x1, x19, :lo12:.LANCHOR2 mov w4, 128 mov w2, 0 @@ -3264,26 +3298,26 @@ NandcXferStart: cmp w0, 25 mov w0, 64 csel w4, w0, w4, cc -.L481: +.L482: cmp w3, w8 - bcs .L485 + bcs .L486 lsr w0, w2, 2 ubfiz x0, x0, 2, 30 - cbz w7, .L482 + cbz w7, .L483 ldrh w6, [x5,2] ldr x10, [x1,600] ldrh w11, [x5],4 orr w6, w11, w6, lsl 16 str w6, [x10,x0] - b .L483 -.L482: + b .L484 +.L483: ldr x6, [x1,600] str w9, [x6,x0] -.L483: +.L484: add w3, w3, 1 add w2, w2, w4 - b .L481 -.L479: + b .L482 +.L480: add x19, x19, :lo12:.LANCHOR2 ubfx x23, x20, 22, 5 mov w2, w25 @@ -3313,12 +3347,12 @@ NandcXferStart: ldr w0, [x29,88] orr w0, w0, 448 str w0, [x29,88] - cbnz x22, .L486 + cbnz x22, .L487 ldr w0, [x29,88] mov w1, 2 bfi w0, w1, 3, 3 str w0, [x29,88] -.L486: +.L487: ldr w0, [x29,88] cmp w25, wzr cset w1, eq @@ -3330,10 +3364,10 @@ NandcXferStart: ldr w0, [x29,88] orr w0, w0, 1 str w0, [x29,88] -.L475: +.L476: ldr w0, [x29,88] str w0, [x21,16] -.L474: +.L475: str w24, [x21,12] str w20, [x21,8] orr w20, w20, 4 @@ -3363,36 +3397,36 @@ NandcXferComp: add x0, x20, :lo12:.LANCHOR2 ldr w0, [x0,580] cmp w0, 3 - bls .L523 + bls .L524 ldr w0, [x19,16] - tbz x0, 2, .L523 + tbz x0, 2, .L524 mov x0, x19 bl wait_for_nandc_xfer_completed ldr w21, [x19,16] ldr w0, [x19,8] ubfx x21, x21, 1, 1 str w0, [x29,64] - cbz w21, .L494 + cbz w21, .L495 adrp x22, .LC4 adrp x23, .LC5 mov w21, 0 add x22, x22, :lo12:.LC4 add x23, x23, :lo12:.LC5 -.L495: +.L496: ldr w2, [x19,28] ldr w1, [x29,64] ubfx x2, x2, 16, 5 ubfx x1, x1, 22, 6 cmp w2, w1 - bge .L503 + bge .L504 add x0, x20, :lo12:.LANCHOR2 ldr w0, [x0,580] cmp w0, 5 - bhi .L496 -.L499: + bhi .L497 +.L500: add w21, w21, 1 and w0, w21, 16777215 - cbnz w0, .L495 + cbnz w0, .L496 ldr w2, [x19,28] mov w1, w21 ldr w3, [x29,64] @@ -3405,19 +3439,19 @@ NandcXferComp: mov w2, 4 mov w3, 512 bl rknand_print_hex - b .L495 -.L496: + b .L496 +.L497: ldr w0, [x19] str w0, [x29,72] ldr w0, [x29,72] - tbz x0, 13, .L499 + tbz x0, 13, .L500 ldr w0, [x29,72] - tbz x0, 17, .L499 -.L503: + tbz x0, 17, .L500 +.L504: add x19, x20, :lo12:.LANCHOR2 add x19, x19, 592 ldr w0, [x19,40] - cbz w0, .L504 + cbz w0, .L505 ldr w1, [x29,64] mov w2, 0 ldr w0, [x19,32] @@ -3430,20 +3464,20 @@ NandcXferComp: ubfx x1, x1, 22, 5 lsl w1, w1, 7 bl rknand_dma_unmap_single - b .L504 -.L494: + b .L505 +.L495: adrp x22, .LC6 adrp x23, .LC5 add x22, x22, :lo12:.LC6 add x23, x23, :lo12:.LC5 -.L505: +.L506: ldr w0, [x29,64] - tbnz x0, 20, .L531 + tbnz x0, 20, .L532 ldr w0, [x19,8] add w21, w21, 1 str w0, [x29,64] and w0, w21, 16777215 - cbnz w0, .L505 + cbnz w0, .L506 ldr w2, [x29,64] mov w1, w21 ldr w3, [x19,28] @@ -3455,18 +3489,18 @@ NandcXferComp: mov w2, 4 mov w3, 512 bl rknand_print_hex - b .L505 -.L531: + b .L506 +.L532: add x0, x20, :lo12:.LANCHOR2 ldr w0, [x0,640] - cbz w0, .L508 + cbz w0, .L509 mov x0, x19 bl NandcSendDumpDataStart -.L508: +.L509: add x21, x20, :lo12:.LANCHOR2 add x21, x21, 592 ldr w0, [x21,40] - cbz w0, .L509 + cbz w0, .L510 ldr w1, [x29,64] mov w2, 1 ldr w0, [x21,32] @@ -3479,22 +3513,22 @@ NandcXferComp: ubfx x1, x1, 22, 5 lsl w1, w1, 7 bl rknand_dma_unmap_single -.L509: +.L510: add x0, x20, :lo12:.LANCHOR2 ldr w0, [x0,640] - cbz w0, .L504 + cbz w0, .L505 mov x0, x19 bl NandcSendDumpDataDone -.L504: +.L505: add x20, x20, :lo12:.LANCHOR2 str wzr, [x20,632] - b .L492 -.L523: + b .L493 +.L524: ldr w0, [x19,8] str w0, [x29,64] ldr w0, [x29,64] - tbz x0, 20, .L523 -.L492: + tbz x0, 20, .L524 +.L493: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldr x23, [sp,48] @@ -3517,14 +3551,14 @@ NandcCopy1KB: add x4, x0, 4096 add x21, x0, 512 add x2, x4, x2 - bne .L533 - cbz x3, .L534 + bne .L534 + cbz x3, .L535 mov x0, x2 mov x1, x3 mov w2, 1024 bl ftl_memcpy -.L534: - cbz x20, .L532 +.L535: + cbz x20, .L533 mov w0, 48 lsr w19, w19, 1 ldrb w1, [x20,1] @@ -3538,15 +3572,15 @@ NandcCopy1KB: ldrb w1, [x20,3] orr w0, w0, w1, lsl 24 str w0, [x21,w19,sxtw 2] - b .L532 -.L533: - cbz x3, .L537 + b .L533 +.L534: + cbz x3, .L538 mov x1, x2 mov x0, x3 mov w2, 1024 bl ftl_memcpy -.L537: - cbz x20, .L532 +.L538: + cbz x20, .L533 mov w0, 48 lsr w19, w19, 1 mul w19, w19, w0 @@ -3559,7 +3593,7 @@ NandcCopy1KB: lsr w0, w0, 24 strb w1, [x20,2] strb w0, [x20,3] -.L532: +.L533: ldp x19, x20, [sp,16] ldr x21, [sp,32] ldp x29, x30, [sp], 48 @@ -3586,14 +3620,14 @@ NandcXferData: uxtb w23, w2 mov x25, x3 mov x21, x4 - cbnz x0, .L549 - cbnz x4, .L550 + cbnz x0, .L550 + cbnz x4, .L551 add x0, x29, 112 mov w1, 255 mov w2, 64 add x21, x29, 112 bl ftl_memset -.L550: +.L551: mov w0, w24 mov w1, w20 mov w2, w23 @@ -3604,7 +3638,7 @@ NandcXferData: bl NandcXferStart mov w0, w24 bl NandcXferComp - cbnz w20, .L551 + cbnz w20, .L552 adrp x0, .LANCHOR2 ubfx x3, x23, 1, 7 add x2, x0, :lo12:.LANCHOR2 @@ -3615,10 +3649,10 @@ NandcXferData: mov w1, 64 csel w4, w1, w4, cc mov w1, w20 -.L553: +.L554: cmp x21, x3 add w5, w1, w4 - beq .L595 + beq .L596 ldr x6, [x2,600] and x1, x1, 4294967292 add x21, x21, 4 @@ -3631,29 +3665,29 @@ NandcXferData: lsr w1, w1, 24 strb w1, [x21,-1] mov w1, w5 - b .L553 -.L595: + b .L554 +.L596: add x0, x0, :lo12:.LANCHOR2 lsr w23, w23, 2 ldr w4, [x0,644] ldr w5, [x0,580] mov w0, 0 mov w22, w0 -.L555: +.L556: cmp w0, w23 - bcs .L551 - cbz w4, .L551 + bcs .L552 + cbz w4, .L552 uxtw x1, w0 add x1, x1, 8 ldr w1, [x19,x1,lsl 2] str w1, [x29,104] ldr w1, [x29,104] - tbnz x1, 2, .L579 + tbnz x1, 2, .L580 ldr w3, [x29,104] ubfx x3, x3, 15, 1 - cbnz w3, .L579 + cbnz w3, .L580 cmp w5, 5 - bls .L557 + bls .L558 ldr w2, [x29,104] ubfx x6, x2, 3, 5 ldr w2, [x29,104] @@ -3666,20 +3700,20 @@ NandcXferData: orr w1, w3, w1, lsl 5 ldr w3, [x29,104] cmp w2, w1 - bls .L558 + bls .L559 ldr w1, [x29,104] ubfx x3, x3, 3, 5 ubfx x1, x1, 27, 1 orr w3, w3, w1, lsl 5 - b .L559 -.L558: + b .L560 +.L559: ubfx x1, x3, 16, 5 ldr w3, [x29,104] ubfx x3, x3, 29, 1 - b .L594 -.L557: + b .L595 +.L558: cmp w5, 3 - bls .L559 + bls .L560 ldr w2, [x29,104] ubfx x6, x2, 3, 5 ldr w2, [x29,104] @@ -3692,43 +3726,43 @@ NandcXferData: orr w1, w3, w1, lsl 5 ldr w3, [x29,104] cmp w2, w1 - bls .L560 + bls .L561 ubfx x1, x3, 3, 5 ldr w3, [x29,104] ubfx x3, x3, 28, 1 - b .L594 -.L560: + b .L595 +.L561: ubfx x1, x3, 16, 5 ldr w3, [x29,104] ubfx x3, x3, 30, 1 -.L594: +.L595: orr w3, w1, w3, lsl 5 -.L559: +.L560: cmp w22, w3 csel w22, w22, w3, cs - b .L556 -.L579: + b .L557 +.L580: mov w22, -1 -.L556: +.L557: add w0, w0, 1 - b .L555 -.L551: + b .L556 +.L552: str wzr, [x19,16] - b .L562 -.L549: + b .L563 +.L550: cmp w20, 1 - bne .L593 + bne .L594 mov w22, 0 mov w27, 2 -.L563: +.L564: cmp w22, w23 - bcs .L596 + bcs .L597 and w26, w22, 3 mov x3, x25 - cbz x25, .L565 + cbz x25, .L566 ubfiz x0, x22, 9, 23 add x3, x25, x0 -.L565: +.L566: cmp x21, xzr mov x0, x19 csel w4, w27, wzr, ne @@ -3747,11 +3781,11 @@ NandcXferData: bl NandcXferStart mov w0, w24 bl NandcXferComp - b .L563 -.L596: + b .L564 +.L597: mov w22, 0 - b .L562 -.L593: + b .L563 +.L594: mov w1, 0 mov x4, 0 mov w26, 0 @@ -3762,16 +3796,16 @@ NandcXferData: mov w22, w26 mov w27, 2 bl NandcXferStart -.L568: +.L569: cmp w26, w23 - bcs .L562 + bcs .L563 mov w0, w24 add w28, w26, 2 bl NandcXferComp ldr w0, [x19,32] cmp w28, w23 str w0, [x29,104] - bcs .L569 + bcs .L570 mov x4, 0 mov w0, w24 mov w1, 0 @@ -3779,9 +3813,9 @@ NandcXferData: and w3, w28, 3 mov x5, x4 bl NandcXferStart -.L569: +.L570: ldr w0, [x29,104] - tbnz x0, 2, .L584 + tbnz x0, 2, .L585 ldr w0, [x29,104] ubfx x1, x0, 3, 5 ldr w0, [x29,104] @@ -3789,16 +3823,16 @@ NandcXferData: orr w0, w1, w0, lsl 5 cmp w22, w0 csel w22, w22, w0, cs - b .L570 -.L584: + b .L571 +.L585: mov w22, -1 -.L570: +.L571: and w2, w26, 3 mov x3, x25 - cbz x25, .L571 + cbz x25, .L572 ubfiz x3, x26, 9, 23 add x3, x25, x3 -.L571: +.L572: cmp x21, xzr mov x0, x19 csel w4, w27, wzr, ne @@ -3807,23 +3841,23 @@ NandcXferData: mov w26, w28 add x4, x21, x4 bl NandcCopy1KB - b .L568 -.L562: - cbnz w20, .L574 + b .L569 +.L563: + cbnz w20, .L575 adrp x0, .LANCHOR2+580 ldr w0, [x0,#:lo12:.LANCHOR2+580] cmp w0, 5 - bls .L574 + bls .L575 ldr w0, [x19] mov w1, 8192 movk w1, 0x2, lsl 16 and w1, w0, w1 cmp w1, 139264 - bne .L574 + bne .L575 orr w0, w0, 131072 mov w22, -1 str w0, [x19] -.L574: +.L575: mov w0, w22 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -3846,7 +3880,7 @@ FlashReadRawPage: str x21, [sp,32] mov x21, x2 ldrb w20, [x0,#:lo12:.LANCHOR1+265] - cbnz w19, .L598 + cbnz w19, .L599 adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 ldrb w5, [x0,25] @@ -3855,7 +3889,7 @@ FlashReadRawPage: cmp w1, w0 mov w0, 4 csel w20, w20, w0, cs -.L598: +.L599: mov w0, w19 str x4, [x29,48] str x1, [x29,56] @@ -3911,7 +3945,7 @@ FlashDdrTunningRead: cmp w0, 8 mov w0, 12 csel w22, w22, w0, cc - cbz w4, .L601 + cbz w4, .L602 mov w0, 1 bl FlashSetInterfaceMode mov w0, 1 @@ -3929,41 +3963,41 @@ FlashDdrTunningRead: ldrb w0, [x27,564] bl NandcSetMode cmn w21, #1 - bne .L602 -.L611: + bne .L603 +.L612: mov w21, -1 - b .L603 -.L602: + b .L604 +.L603: adrp x0, .LC7 mov w1, w25 add x0, x0, :lo12:.LC7 mov w2, w21 bl printk cmp w21, 9 - bhi .L604 + bhi .L605 add x20, x20, x24, sxtw 4 ldr x0, [x20,40] ldr w1, [x0,3840] ldr w1, [x0] orr w1, w1, 131072 str w1, [x0] -.L604: +.L605: add x19, x19, :lo12:.LANCHOR2 ldr w0, [x19,656] add w0, w0, 1 str w0, [x19,656] cmp w0, 2047 - bls .L603 + bls .L604 mov x23, 0 str wzr, [x19,656] mov x28, x23 -.L601: +.L602: mov w19, 0 mov w27, -1 mov w5, w19 mov w6, w19 mov w20, w19 -.L609: +.L610: mov w0, w22 str x5, [x29,104] str x6, [x29,112] @@ -3977,63 +4011,63 @@ FlashDdrTunningRead: ldr x6, [x29,112] cmp w0, w1 ldr x5, [x29,104] - bhi .L605 + bhi .L606 cmp w0, 2 - bhi .L615 + bhi .L616 add w20, w20, 1 cmp w20, 9 - bls .L615 + bls .L616 sub w19, w22, w20 mov w21, w0 mov w27, 0 - b .L607 -.L605: + b .L608 +.L606: cmp w6, w20 - bcs .L616 + bcs .L617 cmp w20, 7 sub w5, w19, w20 - bhi .L617 + bhi .L618 mov w6, w20 - b .L616 -.L615: + b .L617 +.L616: mov x23, 0 mov w19, w22 mov w21, w0 mov w27, 0 mov x28, x23 - b .L606 -.L616: + b .L607 +.L617: mov w20, 0 -.L606: +.L607: add w22, w22, 2 cmp w22, 69 - bls .L609 -.L607: + bls .L610 +.L608: cmp w6, w20 csel w19, w19, w5, cc - b .L608 -.L617: + b .L609 +.L618: mov w19, w5 -.L608: - cbz w19, .L610 +.L609: + cbz w19, .L611 adrp x0, .LC8 mov w1, w19 add x0, x0, :lo12:.LC8 bl printk mov w0, w19 bl NandcSetDdrPara -.L610: - cbz w27, .L603 +.L611: + cbz w27, .L604 adrp x0, .LC9 mov w1, w24 add x0, x0, :lo12:.LC9 mov w2, w25 bl printk - cbz w26, .L611 + cbz w26, .L612 ldr w0, [x29,124] lsr w0, w0, 8 bl NandcSetDdrPara -.L603: +.L604: mov w0, w21 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -4063,17 +4097,17 @@ FlashReadPage: cmn w0, #1 mov w19, w0 adrp x23, .LANCHOR2 - bne .L627 + bne .L628 adrp x21, .LANCHOR0 add x26, x21, :lo12:.LANCHOR0 ldrb w27, [x26,32] - cbnz w27, .L628 -.L630: + cbnz w27, .L629 +.L631: add x0, x23, :lo12:.LANCHOR2 ldrb w0, [x0,572] - cbz w0, .L627 - b .L648 -.L628: + cbz w0, .L628 + b .L649 +.L629: mov w0, w20 mov w1, w22 mov x2, x25 @@ -4082,10 +4116,10 @@ FlashReadPage: bl FlashReadRawPage strb w27, [x26,32] cmn w0, #1 - beq .L630 + beq .L631 mov w19, w0 - b .L627 -.L648: + b .L628 +.L649: add x21, x21, :lo12:.LANCHOR0 mov w1, w22 mov x2, x25 @@ -4097,19 +4131,19 @@ FlashReadPage: bl FlashDdrTunningRead cmn w0, #1 mov w19, w0 - beq .L631 + beq .L632 ldrb w0, [x21,4044] cmp w19, w0, lsr 1 - bls .L627 -.L631: + bls .L628 +.L632: lsr w0, w26, 8 bl NandcSetDdrPara -.L627: +.L628: add x21, x23, :lo12:.LANCHOR2 cmn w19, #1 ldr x4, [x21,664] - bne .L632 - cbz x4, .L632 + bne .L633 + cbz x4, .L633 mov w1, w22 mov x2, x25 mov x3, x24 @@ -4123,10 +4157,10 @@ FlashReadPage: mov w3, w22 bl printk cmn w19, #1 - bne .L632 + bne .L633 adrp x0, .LANCHOR0+136 ldrb w0, [x0,#:lo12:.LANCHOR0+136] - cbz w0, .L632 + cbz w0, .L633 mov w0, w20 bl flash_enter_slc_mode ldr x4, [x21,664] @@ -4138,7 +4172,7 @@ FlashReadPage: mov w19, w0 mov w0, w20 bl flash_exit_slc_mode -.L632: +.L633: mov w0, w19 ldr x27, [sp,80] ldp x19, x20, [sp,16] @@ -4177,24 +4211,24 @@ FlashDdrParaScan: mov x3, x2 bl FlashReadRawPage cmn w0, #1 - beq .L653 + beq .L654 cmn w22, #1 - bne .L650 -.L653: + bne .L651 +.L654: add x20, x19, :lo12:.LANCHOR2 ldrb w0, [x20,564] - tbz x0, 0, .L650 + tbz x0, 0, .L651 mov w0, 1 bl FlashSetInterfaceMode mov w0, 1 bl NandcSetMode strb wzr, [x20,572] - b .L652 -.L650: + b .L653 +.L651: add x19, x19, :lo12:.LANCHOR2 mov w0, 1 strb w0, [x19,572] -.L652: +.L653: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -4235,10 +4269,10 @@ FlashLoadPhyInfo: mov w24, -1 ldrh w28, [x21,10] bl flash_enter_slc_mode -.L661: +.L662: add w26, w20, 1 mov x22, 0 -.L663: +.L664: add x0, x29, 104 ldrb w0, [x22,x0] bl FlashBchSel @@ -4248,32 +4282,32 @@ FlashLoadPhyInfo: mov x3, 0 bl FlashReadRawPage cmn w0, #1 - bne .L662 + bne .L663 ldr x2, [x19,#:lo12:.LANCHOR0] mov w0, 0 mov w1, w26 mov x3, 0 bl FlashReadRawPage cmn w0, #1 - bne .L662 + bne .L663 add x22, x22, 1 cmp x22, 4 - beq .L664 - b .L663 -.L665: + beq .L665 + b .L664 +.L666: mov w1, 2036 add x0, x26, 12 mov w24, -1 bl JSHash ldr w1, [x26,8] cmp w1, w0 - beq .L675 -.L664: + beq .L676 +.L665: subs w27, w27, #1 add w20, w20, w28 - bne .L661 + bne .L662 mov w0, w27 -.L674: +.L675: bl flash_exit_slc_mode mov w0, w24 ldp x19, x20, [sp,16] @@ -4283,15 +4317,15 @@ FlashLoadPhyInfo: ldp x27, x28, [sp,80] ldp x29, x30, [sp], 112 ret -.L662: +.L663: add x22, x25, :lo12:.LANCHOR2 mov w0, 20036 movk w0, 0x4e41, lsl 16 ldr x26, [x22,672] ldr w1, [x26] cmp w1, w0 - bne .L664 - cbnz w24, .L665 + bne .L665 + cbnz w24, .L666 add x23, x23, :lo12:.LANCHOR1 add x19, x19, :lo12:.LANCHOR0 ldrh w0, [x23,266] @@ -4299,8 +4333,8 @@ FlashLoadPhyInfo: mov w0, w24 add w20, w20, 1 str w20, [x19,8] - b .L674 -.L675: + b .L675 +.L676: add x1, x26, 160 mov w2, 32 mov x0, x21 @@ -4323,18 +4357,18 @@ FlashLoadPhyInfo: ldrh w0, [x21,10] udiv w0, w20, w0 add w2, w0, 1 - cbz w0, .L667 + cbz w0, .L668 str w2, [x24,8] - b .L668 -.L667: + b .L669 +.L668: mov w0, 2 str w0, [x24,8] -.L668: +.L669: add x0, x25, :lo12:.LANCHOR2 ldrh w1, [x1,14] mov w24, 0 strb w1, [x0,684] - b .L664 + b .L665 .size FlashLoadPhyInfo, .-FlashLoadPhyInfo .align 2 .global ToshibaReadRetrial @@ -4371,21 +4405,21 @@ ToshibaReadRetrial: sub w0, w0, #67 uxtb w0, w0 cmp w0, 1 - bls .L677 + bls .L678 adrp x0, .LANCHOR2+572 ldrb w0, [x0,#:lo12:.LANCHOR2+572] - cbz w0, .L678 + cbz w0, .L679 mov w0, w22 mov w22, 1 bl NandcSetDdrMode -.L678: +.L679: ubfiz x0, x28, 8, 8 mov w2, 92 add x0, x24, x0 str w2, [x0,2056] mov w2, 197 str w2, [x0,2056] -.L677: +.L678: adrp x0, g_maxRetryCount mov w21, 1 add x0, x0, :lo12:g_maxRetryCount @@ -4397,44 +4431,44 @@ ToshibaReadRetrial: str x0, [x29,104] ubfiz x0, x28, 8, 8 str x0, [x29,96] -.L679: +.L680: adrp x0, g_maxRetryCount ldrb w0, [x0,#:lo12:g_maxRetryCount] add w0, w0, 1 cmp w21, w0 - bcs .L704 + bcs .L705 ldrb w0, [x20,#:lo12:g_retryMode] mov w1, w21 sub w0, w0, #67 uxtb w0, w0 cmp w0, 1 mov x0, x19 - bhi .L680 + bhi .L681 bl SandiskSetRRPara - b .L681 -.L680: - bl ToshibaSetRRPara + b .L682 .L681: + bl ToshibaSetRRPara +.L682: ldrb w0, [x20,#:lo12:g_retryMode] cmp w0, 34 - bne .L682 + bne .L683 ldr x0, [x29,112] ldrb w0, [x0] sub w0, w0, #3 cmp w21, w0 - bne .L682 + bne .L683 ldr x0, [x29,104] mov w1, 179 add x0, x24, x0 str w1, [x0,8] -.L682: +.L683: ldr x0, [x29,96] mov w1, 38 add x0, x24, x0 str w1, [x0,2056] mov w1, 93 str w1, [x0,2056] - cbz w22, .L683 + cbz w22, .L684 mov w0, 4 bl NandcSetDdrMode ldr w1, [x29,132] @@ -4445,17 +4479,17 @@ ToshibaReadRetrial: mov w28, w0 mov w0, 0 bl NandcSetDdrMode - b .L684 -.L683: + b .L685 +.L684: ldr w1, [x29,132] mov w0, w23 mov x2, x27 mov x3, x26 bl FlashReadRawPage mov w28, w0 -.L684: +.L685: cmn w28, #1 - beq .L685 + beq .L686 ldr x0, [x29,120] cmn w25, #1 csel w25, w25, w28, ne @@ -4463,27 +4497,27 @@ ToshibaReadRetrial: ldrb w0, [x0,4044] add w0, w0, w0, lsl 1 cmp w28, w0, lsr 2 - bcc .L687 + bcc .L688 mov x26, 0 mov x27, x26 -.L685: +.L686: add w21, w21, 1 - b .L679 -.L704: + b .L680 +.L705: mov w28, w25 -.L687: +.L688: ldrb w0, [x20,#:lo12:g_retryMode] mov w1, 0 sub w0, w0, #67 uxtb w0, w0 cmp w0, 1 mov x0, x19 - bhi .L689 + bhi .L690 bl SandiskSetRRPara - b .L690 -.L689: - bl ToshibaSetRRPara + b .L691 .L690: + bl ToshibaSetRRPara +.L691: ldr x0, [x29,136] add x0, x0, 8 add x24, x24, x0, lsl 8 @@ -4494,17 +4528,17 @@ ToshibaReadRetrial: ldrb w0, [x0,4044] add w0, w0, w0, lsl 1 cmp w28, w0, lsr 2 - bcc .L691 + bcc .L692 cmn w28, #1 mov w0, 256 csel w28, w28, w0, eq -.L691: +.L692: mov w0, w23 bl NandcWaitFlashReady - cbz w22, .L692 + cbz w22, .L693 mov w0, 4 bl NandcSetDdrMode -.L692: +.L693: mov w0, w28 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -4544,11 +4578,11 @@ SamsungReadRetrial: ldrb w21, [x2,8] add x21, x21, 8 add x21, x0, x21, lsl 8 -.L706: +.L707: ldrb w0, [x27] add w0, w0, 1 cmp w26, w0 - bcs .L709 + bcs .L710 mov x0, x21 mov w1, w26 bl SamsungSetRRPara @@ -4558,22 +4592,22 @@ SamsungReadRetrial: mov x3, x23 bl FlashReadRawPage cmn w0, #1 - beq .L707 + beq .L708 add x1, x20, :lo12:.LANCHOR0 cmn w19, #1 csel w19, w19, w0, ne ldrb w1, [x1,4044] add w1, w1, w1, lsl 1 cmp w0, w1, lsr 2 - bcc .L712 + bcc .L713 mov x23, 0 mov x24, x23 -.L707: +.L708: add w26, w26, 1 - b .L706 -.L712: + b .L707 +.L713: mov w19, w0 -.L709: +.L710: mov x0, x21 mov w1, 0 add x20, x20, :lo12:.LANCHOR0 @@ -4581,11 +4615,11 @@ SamsungReadRetrial: ldrb w0, [x20,4044] add w0, w0, w0, lsl 1 cmp w19, w0, lsr 2 - bcc .L711 + bcc .L712 cmn w19, #1 mov w0, 256 csel w19, w19, w0, eq -.L711: +.L712: mov w0, w19 ldr x27, [sp,80] ldp x19, x20, [sp,16] @@ -4599,125 +4633,163 @@ SamsungReadRetrial: .global MicronReadRetrial .type MicronReadRetrial, %function MicronReadRetrial: - stp x29, x30, [sp, -144]! - adrp x4, .LANCHOR0 + stp x29, x30, [sp, -160]! add x29, sp, 0 - stp x21, x22, [sp,32] - uxtb w22, w0 - add x0, x4, :lo12:.LANCHOR0 - stp x23, x24, [sp,48] stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + stp x21, x22, [sp,32] + uxtb w21, w0 + add x0, x20, :lo12:.LANCHOR0 stp x25, x26, [sp,64] stp x27, x28, [sp,80] - mov w24, w1 - mov x25, x2 - ldrb w20, [x0,4044] - mov x23, x3 + stp x23, x24, [sp,48] + mov w28, w1 + mov x26, x2 + ldrb w19, [x0,4044] + mov x22, x3 ldrb w0, [x0,136] - mov x19, x4 - cbnz w0, .L719 - add w20, w20, w20, lsl 1 - ubfx x20, x20, 2, 8 - b .L720 -.L719: - mov w0, 3 - sdiv w20, w20, w0 + cbnz w0, .L720 + add w19, w19, w19, lsl 1 + ubfx x19, x19, 2, 8 + b .L721 .L720: - mov w0, w22 - adrp x28, g_maxRetryCount - mov w27, 0 - add x28, x28, :lo12:g_maxRetryCount - bl NandcWaitFlashReady - add x4, x19, :lo12:.LANCHOR0 - sbfiz x0, x22, 4, 32 - add x4, x4, 40 - mov w19, -1 - add x1, x4, x0 - mov w7, 239 - mov w8, 137 - ldr x4, [x4,x0] - ldrb w21, [x1,8] - lsl x6, x21, 8 + mov w0, 3 + sdiv w19, w19, w0 .L721: - ldrb w0, [x28] - cmp w27, w0 - bcs .L724 - add x26, x4, x6 + adrp x0, g_maxRetryCount + adrp x27, .LC11 + add x0, x0, :lo12:g_maxRetryCount + mov w25, 0 + str x0, [x29,152] + add x0, x27, :lo12:.LC11 + str x0, [x29,144] + add x20, x20, :lo12:.LANCHOR0 + add x23, x20, 40 + add x23, x23, x21, sxtw 4 +.L732: + mov w0, w21 + mov w24, 0 + mov w27, -1 + bl NandcWaitFlashReady + ldrb w4, [x23,8] + mov w9, 239 + ldr x6, [x23] + mov w10, 137 + lsl x8, x4, 8 +.L722: + ldr x0, [x29,152] + ldrb w0, [x0] + cmp w24, w0 + bcs .L725 + add x2, x6, x8 mov w0, 200 - str x6, [x29,104] - str x4, [x29,112] - str w7, [x26,2056] - str w8, [x26,2052] - str x7, [x29,120] - str x8, [x29,128] + str x4, [x29,96] + str x8, [x29,104] + str w9, [x2,2056] + str w10, [x2,2052] + str x6, [x29,112] + str x9, [x29,120] + str x10, [x29,128] + str x2, [x29,136] bl NandcDelayns - add w5, w27, 1 - str w5, [x26,2048] - str wzr, [x26,2048] - mov w0, w22 - str wzr, [x26,2048] - mov w1, w24 - str wzr, [x26,2048] - mov x2, x25 - mov x3, x23 - str x5, [x29,136] + ldr x2, [x29,136] + add w7, w24, 1 + mov w0, w21 + mov w1, w28 + mov x3, x22 + str x7, [x29,136] + str w7, [x2,2048] + str wzr, [x2,2048] + str wzr, [x2,2048] + str wzr, [x2,2048] + mov x2, x26 bl FlashReadRawPage cmn w0, #1 - ldr x5, [x29,136] - ldr x8, [x29,128] - ldr x7, [x29,120] - ldr x4, [x29,112] - ldr x6, [x29,104] - beq .L722 - cmn w19, #1 - csel w19, w19, w0, ne - cmp w0, w20 - bcc .L729 - mov x23, 0 - mov x25, x23 -.L722: - mov w27, w5 - b .L721 -.L729: - mov w19, w0 -.L724: - add x21, x4, x21, lsl 8 + ldr x7, [x29,136] + ldr x10, [x29,128] + ldr x9, [x29,120] + ldr x6, [x29,112] + ldr x8, [x29,104] + ldr x4, [x29,96] + beq .L723 + cmn w27, #1 + csel w27, w27, w0, ne + cmp w0, w19 + bcc .L734 + mov x22, 0 + mov x26, x22 +.L723: + mov w24, w7 + b .L722 +.L734: + mov x22, 0 + mov w27, w0 + mov x26, x22 +.L725: + add x1, x6, x4, lsl 8 mov w0, 239 - str w0, [x21,2056] + str x1, [x29,136] + str w0, [x1,2056] mov w0, 137 - str w0, [x21,2052] + str w0, [x1,2052] mov w0, 200 bl NandcDelayns - str wzr, [x21,2048] - str wzr, [x21,2048] - cmp w19, w20 - str wzr, [x21,2048] - str wzr, [x21,2048] - bcc .L726 - cmn w19, #1 + ldr x1, [x29,136] + cmp w27, w19 + str wzr, [x1,2048] + str wzr, [x1,2048] + str wzr, [x1,2048] + str wzr, [x1,2048] + bcc .L727 + cmn w27, #1 mov w0, 256 - csel w19, w19, w0, eq -.L726: - cmn w19, #1 - beq .L730 - cmp w19, 256 - bne .L727 -.L730: - adrp x0, .LC11 - mov w1, w27 - add x0, x0, :lo12:.LC11 - mov w2, w24 - mov w3, w27 - mov w4, w19 - bl printk + csel w27, w27, w0, eq .L727: - mov w0, w19 + cmn w27, #1 + cset w6, eq + cbnz w6, .L736 + cmp w27, 256 + cset w1, eq + cbz w1, .L728 +.L736: + ldr x0, [x29,144] + mov w1, w24 + mov w2, w28 + mov w3, w24 + mov w4, w27 + str x6, [x29,136] + bl printk + cbnz w25, .L730 + ldr x6, [x29,136] + cbz w6, .L741 + ldrb w0, [x20,136] + cbz w0, .L741 + mov w0, w21 + mov w1, 3 + mov w25, 1 + bl micron_auto_read_calibration_config + b .L732 +.L730: + mov w0, w21 + mov w1, 0 + bl micron_auto_read_calibration_config + cmn w27, #1 + mov w0, 256 + csel w27, w27, w0, eq + b .L741 +.L728: + cbz w25, .L741 + mov w0, w21 + mov w27, 256 + bl micron_auto_read_calibration_config +.L741: + mov w0, w27 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] ldp x25, x26, [sp,64] ldp x27, x28, [sp,80] - ldp x29, x30, [sp], 144 + ldp x29, x30, [sp], 160 ret .size MicronReadRetrial, .-MicronReadRetrial .align 2 @@ -4745,18 +4817,18 @@ HynixReadRetrial: ldrb w19, [x0,12] ldrb w1, [x1,19] cmp w1, 7 - bne .L740 + bne .L750 ldrb w19, [x0,20] -.L740: +.L750: mov w0, w23 mov w28, 0 mov w20, -1 bl NandcWaitFlashReady add x4, x21, :lo12:.LANCHOR0 add x5, x4, 4060 -.L741: +.L751: cmp w28, w25 - bcs .L745 + bcs .L755 add w19, w19, 1 ldrb w1, [x4,4057] mov x2, x5 @@ -4776,42 +4848,42 @@ HynixReadRetrial: cmn w0, #1 ldr x5, [x29,104] ldr x4, [x29,96] - beq .L743 + beq .L753 ldrb w1, [x4,4044] cmn w20, #1 csel w20, w20, w0, ne add w1, w1, w1, lsl 1 cmp w0, w1, lsr 2 - bcc .L750 + bcc .L760 mov x24, 0 mov x26, x24 -.L743: +.L753: add w28, w28, 1 - b .L741 -.L750: + b .L751 +.L760: mov w20, w0 -.L745: +.L755: add x0, x21, :lo12:.LANCHOR0 ldr x1, [x0,1912] add x0, x0, 4056 add x0, x0, x22 ldrb w1, [x1,19] cmp w1, 7 - bne .L747 + bne .L757 strb w19, [x0,20] - b .L748 -.L747: + b .L758 +.L757: strb w19, [x0,12] -.L748: +.L758: add x21, x21, :lo12:.LANCHOR0 ldrb w0, [x21,4044] add w0, w0, w0, lsl 1 cmp w20, w0, lsr 2 - bcc .L749 + bcc .L759 cmn w20, #1 mov w0, 256 csel w20, w20, w0, eq -.L749: +.L759: mov w0, w20 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -4835,21 +4907,21 @@ FlashProgPage: mov w20, w1 mov x22, x2 ldrb w21, [x0,#:lo12:.LANCHOR1+265] - cbnz w19, .L757 + cbnz w19, .L767 adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 ldrb w1, [x0,25] ldr w2, [x0,28] mul w1, w1, w2 cmp w20, w1 - bcs .L757 + bcs .L767 ldrb w0, [x0,24] - cbnz w0, .L758 + cbnz w0, .L768 sub w21, w21, #2 - b .L757 -.L758: + b .L767 +.L768: mov w21, 4 -.L757: +.L767: mov w0, w19 str x4, [x29,56] bl NandcWaitFlashReady @@ -4959,7 +5031,7 @@ FlashSavePhyInfo: mov w0, 0 mov w19, w21 bl flash_enter_slc_mode -.L762: +.L772: add x20, x22, :lo12:.LANCHOR0 mov w2, 0 mov w0, 0 @@ -4988,34 +5060,34 @@ FlashSavePhyInfo: mul w1, w19, w1 bl FlashReadRawPage cmn w0, #1 - beq .L760 + beq .L770 ldr x25, [x24,672] mov w0, 20036 movk w0, 0x4e41, lsl 16 ldr w1, [x25] cmp w1, w0 - bne .L760 + bne .L770 mov w1, 2036 add x0, x25, 12 bl JSHash ldr w1, [x25,8] cmp w1, w0 - bne .L760 + bne .L770 ldr w0, [x20,28] cmp w21, 1 str w26, [x20,8] mul w19, w19, w0 str w19, [x24,680] - beq .L763 + beq .L773 mov w21, 1 -.L760: +.L770: cmp w26, 4 mov w19, w26 - bne .L762 - b .L761 -.L763: + bne .L772 + b .L771 +.L773: mov w21, 2 -.L761: +.L771: mov w0, 0 bl flash_exit_slc_mode cmp w21, wzr @@ -5056,10 +5128,10 @@ FlashReadIdbDataRaw: mov w0, 12336 movk w0, 0x5638, lsl 16 cmp w1, w0 - bne .L769 + bne .L779 mov w0, 0 bl flash_enter_slc_mode -.L769: +.L779: adrp x25, .LC12 mov x0, x27 mov w1, 0 @@ -5068,13 +5140,13 @@ FlashReadIdbDataRaw: mov w20, 2 add x25, x25, :lo12:.LC12 bl ftl_memset -.L770: +.L780: add x0, x21, :lo12:.LANCHOR0 ldrb w0, [x0,25] cmp w20, w0 - bcs .L774 + bcs .L784 mov x23, 0 -.L772: +.L782: add x0, x29, 104 add x19, x21, :lo12:.LANCHOR0 ldrb w26, [x23,x0] @@ -5087,18 +5159,18 @@ FlashReadIdbDataRaw: mul w1, w20, w1 bl FlashReadRawPage cmn w0, #1 - bne .L771 + bne .L781 add x23, x23, 1 cmp x23, 4 - bne .L772 - b .L773 -.L771: + bne .L782 + b .L783 +.L781: ldr x0, [x19] ldr w1, [x0] mov w0, 35899 movk w0, 0xfcdc, lsl 16 cmp w1, w0 - bne .L773 + bne .L783 mov w1, w26 mov x0, x25 bl printk @@ -5111,16 +5183,16 @@ FlashReadIdbDataRaw: strb w0, [x19,25] ldr w0, [x19,8] cmp w0, w20 - bls .L777 + bls .L787 mov w24, 0 str w20, [x19,8] bl FlashSavePhyInfo -.L773: +.L783: add w20, w20, 1 - b .L770 -.L777: + b .L780 +.L787: mov w24, 0 -.L774: +.L784: mov w0, w28 add x22, x22, :lo12:.LANCHOR2 bl FlashBchSel @@ -5128,10 +5200,10 @@ FlashReadIdbDataRaw: mov w0, 12336 movk w0, 0x5638, lsl 16 cmp w1, w0 - bne .L779 + bne .L789 mov w0, 0 bl flash_exit_slc_mode -.L779: +.L789: mov w0, w24 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -5194,7 +5266,7 @@ FlashInit: add x0, x25, :lo12:.LC13 mov x26, x21 str x0, [x29,104] -.L786: +.L796: uxtb w25, w27 mov w0, w25 bl FlashReset @@ -5229,7 +5301,7 @@ FlashInit: sub w0, w2, #1 uxtb w0, w0 cmp w0, 253 - bhi .L782 + bhi .L792 ldr x0, [x29,104] add w1, w27, 1 ldrb w3, [x21,1] @@ -5238,35 +5310,35 @@ FlashInit: ldrb w6, [x21,4] ldrb w7, [x21,5] bl printk -.L782: - cbnz w27, .L783 +.L792: + cbnz w27, .L793 ldrb w0, [x26] sub w0, w0, #1 uxtb w0, w0 cmp w0, 253 - bhi .L830 + bhi .L840 ldrb w0, [x26,1] cmp w0, 255 - beq .L830 + beq .L840 bl FlashCs123Init -.L783: +.L793: ldrb w0, [x21] cmp w0, 181 - bne .L785 + bne .L795 strb w28, [x21] -.L785: +.L795: add w27, w27, 1 add x24, x24, 16 cmp w27, 4 add x21, x21, 8 - bne .L786 + bne .L796 ldrb w0, [x23,#:lo12:IDByte] cmp w0, 173 - beq .L787 + beq .L797 add x0, x20, :lo12:.LANCHOR2 ldr w0, [x0,576] bl NandcSetDdrMode -.L787: +.L797: add x21, x19, :lo12:.LANCHOR0 mov w1, 0 mov w2, 852 @@ -5284,16 +5356,16 @@ FlashInit: cmp w0, 161 cset w2, eq orr w2, w3, w2 - cbnz w2, .L788 + cbnz w2, .L798 and w2, w0, -33 cmp w2, 209 - beq .L788 + beq .L798 cmp w0, 220 - bne .L789 + bne .L799 ldrb w2, [x4,3] cmp w2, 149 - bne .L789 -.L788: + bne .L799 +.L798: add x2, x19, :lo12:.LANCHOR0 mov w4, 1 mov w5, 16 @@ -5307,37 +5379,37 @@ FlashInit: strb w5, [x2,3033] strb w0, [x2,3034] cmp w5, 152 - bne .L790 + bne .L800 ldrsb w2, [x6,4] - tbnz w2, #31, .L790 + tbnz w2, #31, .L800 mov w2, 24 strb w2, [x4,685] -.L790: +.L800: add x2, x20, :lo12:.LANCHOR2 mov w4, 12336 movk w4, 0x5638, lsl 16 ldr w5, [x2,568] cmp w5, w4 - bne .L791 + bne .L801 mov w4, 16 strb w4, [x2,685] -.L791: - cbz w3, .L792 +.L801: + cbz w3, .L802 add x0, x1, :lo12:.LANCHOR1 mov w2, 2048 strh w2, [x0,3046] mov w2, -38 - b .L861 -.L792: + b .L871 +.L802: cmp w0, 220 - bne .L793 + bne .L803 add x0, x1, :lo12:.LANCHOR1 mov w2, 4096 strh w2, [x0,3046] mov w2, -36 -.L861: +.L871: strb w2, [x0,3034] -.L793: +.L803: add x21, x1, :lo12:.LANCHOR1 add x0, x19, :lo12:.LANCHOR0 add x1, x21, 2688 @@ -5348,45 +5420,45 @@ FlashInit: add x1, x21, 3032 mov w2, 32 bl ftl_memcpy -.L789: +.L799: add x21, x19, :lo12:.LANCHOR0 ldrb w0, [x21,24] - cbnz w0, .L794 + cbnz w0, .L804 bl FlashLoadPhyInfoInRam - cbnz w0, .L796 + cbnz w0, .L806 ldr x0, [x21,1912] add x21, x20, :lo12:.LANCHOR2 ldrb w1, [x0,17] and w0, w1, 7 strb w0, [x21,564] - tbnz x1, 0, .L796 + tbnz x1, 0, .L806 mov w1, 1 strb w1, [x21,572] bl FlashSetInterfaceMode ldrb w0, [x21,564] bl NandcSetMode -.L796: +.L806: add x0, x19, :lo12:.LANCHOR0 ldr x1, [x0,1912] ldrb w1, [x1,26] strb w1, [x0,136] bl FlashLoadPhyInfo - cbz w0, .L794 + cbz w0, .L804 add x21, x20, :lo12:.LANCHOR2 ldr w0, [x21,576] - cbz w0, .L799 + cbz w0, .L809 mov w0, 1 bl FlashSetInterfaceMode mov w0, 1 - b .L862 -.L799: + b .L872 +.L809: ldrb w0, [x21,564] bl FlashSetInterfaceMode ldrb w0, [x21,564] -.L862: +.L872: bl NandcSetMode bl FlashLoadPhyInfo - cbz w0, .L794 + cbz w0, .L804 mov w0, 1 add x21, x19, :lo12:.LANCHOR0 bl FlashSetInterfaceMode @@ -5399,7 +5471,7 @@ FlashInit: bl printk bl FlashLoadPhyInfoInRam cmn w0, #1 - beq .L784 + beq .L794 bl FlashDieInfoInit ldr x0, [x21,1912] ldrb w0, [x0,19] @@ -5409,27 +5481,27 @@ FlashInit: ldrb w2, [x0,9] add w1, w1, 4095 cmp w2, w1, lsr 12 - blt .L801 + blt .L811 ldrh w1, [x0,14] add w1, w1, 255 cmp w2, w1, lsr 8 - bge .L802 -.L801: + bge .L812 +.L811: ldrh w1, [x0,14] and w1, w1, -256 strh w1, [x0,14] -.L802: +.L812: add x21, x20, :lo12:.LANCHOR2 ldrb w0, [x21,564] tst w0, 6 - beq .L803 + beq .L813 bl FlashSavePhyInfo ldr w1, [x21,680] mov w0, 0 bl FlashDdrParaScan -.L803: +.L813: bl FlashSavePhyInfo -.L794: +.L804: add x21, x19, :lo12:.LANCHOR0 add x22, x20, :lo12:.LANCHOR2 ldr x2, [x21,1912] @@ -5453,7 +5525,7 @@ FlashInit: bl FlashDieInfoInit ldr x0, [x21,1912] ldrh w1, [x0,16] - tbz x1, 6, .L805 + tbz x1, 6, .L815 adrp x1, g_retryMode adrp x3, g_maxRegNum ldrb w0, [x0,19] @@ -5468,64 +5540,64 @@ FlashInit: uxtb w2, w2 cmp w2, 6 mov x2, x1 - bhi .L806 + bhi .L816 adrp x1, HynixReadRetrial add x1, x1, :lo12:HynixReadRetrial str x1, [x22,664] sub w1, w0, #5 uxtb w1, w1 cmp w1, 1 - bhi .L807 + bhi .L817 mov w1, 1 str w1, [x22,640] - b .L808 -.L807: + b .L818 +.L817: cmp w0, 7 add x21, x21, 4084 - beq .L809 -.L808: + beq .L819 +.L818: add x21, x19, :lo12:.LANCHOR0 add x21, x21, 4076 -.L809: +.L819: mov x1, 0 mov w2, w1 -.L811: +.L821: ldrsb w3, [x21,x1] add x1, x1, 1 cmp w3, wzr csinc w2, w2, w2, ne cmp x1, 32 - bne .L811 + bne .L821 cmp w2, 27 - bls .L805 + bls .L815 bl FlashGetReadRetryDefault bl FlashSavePhyInfo - b .L805 -.L806: + b .L815 +.L816: sub w3, w0, #17 uxtb w3, w3 cmp w3, 2 - bhi .L813 + bhi .L823 adrp x2, MicronReadRetrial cmp w0, 19 add x2, x2, :lo12:MicronReadRetrial str x2, [x22,664] - beq .L814 + beq .L824 mov w0, 7 - b .L864 -.L814: + b .L874 +.L824: mov w0, 15 -.L864: +.L874: strb w0, [x1,#:lo12:g_maxRetryCount] - b .L805 -.L813: + b .L815 +.L823: sub w1, w0, #65 uxtb w1, w1 cmp w1, 1 - bls .L832 + bls .L842 cmp w0, 33 - bne .L815 -.L832: + bne .L825 +.L842: add x0, x20, :lo12:.LANCHOR2 adrp x1, ToshibaReadRetrial add x1, x1, :lo12:ToshibaReadRetrial @@ -5534,8 +5606,8 @@ FlashInit: strb w0, [x5,#:lo12:g_maxRegNum] mov w0, 7 strb w0, [x2,#:lo12:g_maxRetryCount] - b .L805 -.L815: + b .L815 +.L825: sub w1, w0, #67 uxtb w1, w1 cmp w1, 1 @@ -5543,84 +5615,84 @@ FlashInit: cset w4, ls uxtb w1, w1 cmp w1, 1 - bls .L833 - cbz w4, .L817 -.L833: + bls .L843 + cbz w4, .L827 +.L843: add x1, x20, :lo12:.LANCHOR2 adrp x3, ToshibaReadRetrial add x3, x3, :lo12:ToshibaReadRetrial cmp w0, 35 str x3, [x1,664] - beq .L819 + beq .L829 cmp w0, 68 - beq .L819 + beq .L829 mov w0, 7 - b .L863 -.L819: + b .L873 +.L829: mov w0, 17 -.L863: +.L873: strb w0, [x2,#:lo12:g_maxRetryCount] mov w0, 4 - cbnz w4, .L865 + cbnz w4, .L875 mov w0, 5 -.L865: +.L875: strb w0, [x5,#:lo12:g_maxRegNum] - b .L805 -.L817: + b .L815 +.L827: cmp w0, 49 - bne .L805 + bne .L815 adrp x0, SamsungReadRetrial add x0, x0, :lo12:SamsungReadRetrial str x0, [x22,664] -.L805: +.L815: add x0, x20, :lo12:.LANCHOR2 ldr w1, [x0,568] mov w0, 12336 movk w0, 0x5638, lsl 16 cmp w1, w0 - bne .L822 + bne .L832 add x0, x19, :lo12:.LANCHOR0 ldrb w2, [x0,136] - cbz w2, .L822 + cbz w2, .L832 ldr x0, [x0,1912] strb wzr, [x0,18] -.L822: +.L832: ldrb w0, [x23,#:lo12:IDByte] cmp w0, 44 - bne .L823 + bne .L833 add x0, x20, :lo12:.LANCHOR2 ldrb w0, [x0,572] - cbz w0, .L823 + cbz w0, .L833 mov w0, 12336 movk w0, 0x5638, lsl 16 cmp w1, w0 - bne .L824 + bne .L834 add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbnz w0, .L823 -.L824: + cbnz w0, .L833 +.L834: add x0, x20, :lo12:.LANCHOR2 strb wzr, [x0,572] mov w0, 1 bl FlashSetInterfaceMode mov w0, 1 bl NandcSetMode -.L823: +.L833: mov w0, 0 bl flash_enter_slc_mode add x1, x20, :lo12:.LANCHOR2 ldrb w0, [x1,564] tst w0, 6 - beq .L825 + beq .L835 ldrb w1, [x1,572] - cbnz w1, .L826 - tbnz x0, 0, .L825 -.L826: + cbnz w1, .L836 + tbnz x0, 0, .L835 +.L836: add x20, x20, :lo12:.LANCHOR2 mov w0, 0 ldr w1, [x20,680] bl FlashDdrParaScan -.L825: +.L835: add x19, x19, :lo12:.LANCHOR0 mov w0, 0 mov w20, 16 @@ -5667,7 +5739,7 @@ FlashInit: ldrb w5, [x19,24] strh w2, [x19,4038] cmp w5, 1 - bne .L828 + bne .L838 lsl w2, w2, 1 lsr w4, w4, 1 lsl w3, w3, 1 @@ -5677,15 +5749,15 @@ FlashInit: strh w4, [x19,4030] strh w3, [x19,4036] strh w2, [x19,4042] -.L828: +.L838: ldrb w0, [x1,20] bl FlashBchSel bl ftl_flash_suspend mov w0, 0 - b .L784 -.L830: + b .L794 +.L840: mov w0, -2 -.L784: +.L794: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -5711,38 +5783,38 @@ FlashPageProgMsbFFData: ldr x2, [x0,1912] ldrb w0, [x0,136] ldrb w3, [x2,19] - cbz w0, .L867 + cbz w0, .L877 adrp x0, .LANCHOR2+568 ldr w2, [x0,#:lo12:.LANCHOR2+568] mov w0, 12336 movk w0, 0x5638, lsl 16 cmp w2, w0 - beq .L866 -.L867: + beq .L876 +.L877: sub w0, w3, #5 uxtb w0, w0 cmp w0, 2 - bls .L868 + bls .L878 cmp w3, 68 - beq .L868 + beq .L878 sub w3, w3, #19 and w3, w3, -17 uxtb w3, w3 - cbnz w3, .L866 -.L868: + cbnz w3, .L876 +.L878: add x20, x20, :lo12:.LANCHOR0 mov w21, w1 add x24, x20, 652 mov w25, 65535 adrp x26, .LANCHOR2 -.L870: +.L880: ldr x0, [x20,1912] ldrh w0, [x0,10] cmp w0, w19 - bls .L866 + bls .L876 ldrh w0, [x24,w19,sxtw 1] cmp w0, w25 - bne .L866 + bne .L876 add x23, x26, :lo12:.LANCHOR2 mov w1, 255 mov w2, 32768 @@ -5755,8 +5827,8 @@ FlashPageProgMsbFFData: add w19, w19, 1 bl FlashProgPage uxth w19, w19 - b .L870 -.L866: + b .L880 +.L876: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -5787,9 +5859,9 @@ FlashReadSlc2KPages: add x21, x21, :lo12:.LANCHOR0 add x23, x23, :lo12:.LC15 add x24, x24, :lo12:.LC17 -.L876: +.L886: cmp w22, w25 - beq .L910 + beq .L920 mov w1, w27 sub w4, w25, w22 mov x0, x19 @@ -5800,11 +5872,11 @@ FlashReadSlc2KPages: adrp x5, .LANCHOR0 ldrb w1, [x21,1676] cmp w0, w1 - bcc .L877 + bcc .L887 mov w0, -1 str w0, [x19] - b .L878 -.L877: + b .L888 +.L887: add x0, x21, x0, uxtw ldrb w28, [x0,1680] str x5, [x29,96] @@ -5853,58 +5925,58 @@ FlashReadSlc2KPages: ldrb w0, [x0,4044] add w0, w0, w0, lsl 1 cmp w3, w0, lsr 2 - bls .L881 + bls .L891 cmn w3, #1 mov w0, 256 csel w3, w3, w0, eq -.L881: +.L891: cmp w3, 256 - beq .L892 + beq .L902 cmn w3, #1 - bne .L882 -.L892: + bne .L892 +.L902: str w3, [x19] - b .L884 -.L882: + b .L894 +.L892: str wzr, [x19] -.L884: +.L894: ldr x0, [x19,16] - cbz x0, .L885 + cbz x0, .L895 ldr w1, [x0,8] cmn w1, #1 - bne .L885 + bne .L895 ldr w0, [x0] cmn w0, #1 - beq .L885 + beq .L895 str w1, [x19] -.L885: +.L895: ldr w3, [x19] cmn w3, #1 - bne .L878 + bne .L888 add x5, x5, :lo12:.LANCHOR0 ldr w1, [x19,4] mov x0, x23 ldrb w2, [x5,4044] bl printk ldr x1, [x19,8] - cbz x1, .L887 + cbz x1, .L897 adrp x0, .LC16 mov w2, 4 add x0, x0, :lo12:.LC16 mov w3, 8 bl rknand_print_hex -.L887: +.L897: ldr x1, [x19,16] - cbz x1, .L878 + cbz x1, .L888 mov w2, 4 mov x0, x24 mov w3, w2 bl rknand_print_hex -.L878: +.L888: add w22, w22, 1 add x19, x19, 56 - b .L876 -.L910: + b .L886 +.L920: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -5936,10 +6008,10 @@ FlashReadPages: ldrb w23, [x3,24] str w2, [x29,140] str w4, [x29,136] - cbz w23, .L951 + cbz w23, .L961 bl FlashReadSlc2KPages - b .L1000 -.L951: + b .L1010 +.L961: adrp x0, .LC15 mov w25, w23 add x0, x0, :lo12:.LC15 @@ -5950,10 +6022,10 @@ FlashReadPages: adrp x0, .LC18 add x0, x0, :lo12:.LC18 str x0, [x29,112] -.L912: +.L922: ldr w0, [x29,144] cmp w25, w0 - bcs .L1002 + bcs .L1012 mov w27, 56 ldr w0, [x29,144] ldr w1, [x29,140] @@ -5970,11 +6042,11 @@ FlashReadPages: ldr w0, [x29,168] ldrb w2, [x1,1676] cmp w0, w2 - bcc .L914 + bcc .L924 mov w0, -1 str w0, [x26,x27] - b .L915 -.L914: + b .L925 +.L924: add x0, x1, x0, uxtw adrp x24, .LANCHOR2 ldrb w19, [x0,1680] @@ -5991,26 +6063,26 @@ FlashReadPages: sub w0, w2, #1 uxtb w0, w0 cmp w0, 6 - bhi .L917 + bhi .L927 add x1, x1, 4056 sxtw x0, w19 add x1, x1, x0 cmp w2, 7 ldrb w3, [x1,12] - bne .L918 + bne .L928 ldrb w3, [x1,20] -.L918: +.L928: add x1, x24, :lo12:.LANCHOR2 add x0, x1, x0 ldrb w0, [x0,560] cmp w0, w3 - beq .L917 + beq .L927 add x2, x22, :lo12:.LANCHOR0 mov w0, w19 add x2, x2, 4060 ldrb w1, [x2,-3] bl HynixSetRRPara -.L917: +.L927: mov w0, w19 bl NandcFlashCs ldr w0, [x29,140] @@ -6018,38 +6090,38 @@ FlashReadPages: cset w0, eq orr w0, w0, w28, lsr 31 str w0, [x29,152] - cbz w0, .L919 + cbz w0, .L929 add x0, x22, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L919 + cbz w0, .L929 mov w0, w19 bl flash_enter_slc_mode - b .L920 -.L919: + b .L930 +.L929: mov w0, w19 bl flash_exit_slc_mode -.L920: +.L930: cmp w19, 255 ldr w1, [x29,172] - bne .L958 + bne .L968 cmn w1, #1 cset w0, ne - cbz w0, .L952 -.L958: - cbz w20, .L924 + cbz w0, .L962 +.L968: + cbz w20, .L934 add x0, x22, :lo12:.LANCHOR0 ldr w2, [x0,28] mov w0, w19 add w2, w1, w2 bl FlashReadDpCmd - b .L925 -.L924: + b .L935 +.L934: mov w0, w19 bl FlashReadCmd - b .L925 -.L952: + b .L935 +.L962: mov w20, w0 -.L922: +.L932: ldrb w2, [x29,148] mov w0, w19 ldr x3, [x21,8] @@ -6058,15 +6130,15 @@ FlashReadPages: bl NandcXferData cmn w0, #1 mov w28, w0 - bne .L926 + bne .L936 add x0, x22, :lo12:.LANCHOR0 ldrb w1, [x0,32] - cbz w1, .L926 + cbz w1, .L936 strb wzr, [x0,32] mov w20, 0 - b .L920 -.L926: - cbz w20, .L927 + b .L930 +.L936: + cbz w20, .L937 add x0, x22, :lo12:.LANCHOR0 ldr w1, [x29,172] ldr w2, [x0,28] @@ -6086,23 +6158,23 @@ FlashReadPages: cmn w0, #1 mov w23, w0 csel w20, w20, wzr, ne -.L927: +.L937: mov w0, w19 bl NandcFlashDeCs add x6, x22, :lo12:.LANCHOR0 ldrb w0, [x29,136] cmn w28, #1 strb w0, [x6,32] - bne .L934 + bne .L944 add x0, x24, :lo12:.LANCHOR2 ldrb w0, [x0,572] - cbnz w0, .L929 -.L933: + cbnz w0, .L939 +.L943: add x0, x24, :lo12:.LANCHOR2 ldr x20, [x0,664] - cbnz x20, .L930 - b .L1003 -.L929: + cbnz x20, .L940 + b .L1013 +.L939: ldr x0, [x6,3976] mov w4, 1 ldr w1, [x29,172] @@ -6114,18 +6186,18 @@ FlashReadPages: bl FlashDdrTunningRead cmn w0, #1 mov w28, w0 - beq .L932 + beq .L942 ldr x6, [x29,104] ldrb w0, [x6,4044] cmp w28, w0, lsr 1 - bls .L954 -.L932: + bls .L964 +.L942: lsr w0, w20, 8 bl NandcSetDdrPara cmn w28, #1 - beq .L933 - b .L954 -.L930: + beq .L943 + b .L964 +.L940: ldr w1, [x29,172] mov w0, w19 ldr x2, [x21,8] @@ -6134,20 +6206,20 @@ FlashReadPages: cmn w0, #1 mov w28, w0 mov w20, 0 - bne .L935 + bne .L945 add x2, x22, :lo12:.LANCHOR0 ldr x0, [x2,1912] ldrb w0, [x0,19] sub w0, w0, #1 uxtb w0, w0 cmp w0, 6 - bhi .L936 + bhi .L946 ldrb w1, [x2,4057] mov w0, w19 add x2, x2, 4060 mov w3, w20 bl HynixSetRRPara -.L936: +.L946: ldr w1, [x29,172] mov w0, w19 ldr x2, [x21,8] @@ -6164,18 +6236,18 @@ FlashReadPages: bl printk cmn w28, #1 ldr x4, [x29,104] - bne .L935 + bne .L945 ldrb w0, [x4,136] - cbz w0, .L935 + cbz w0, .L945 ldr w0, [x29,152] - cbz w0, .L937 + cbz w0, .L947 mov w0, w19 bl flash_enter_slc_mode - b .L938 -.L937: + b .L948 +.L947: mov w0, w19 bl flash_exit_slc_mode -.L938: +.L948: add x0, x24, :lo12:.LANCHOR2 ldr w1, [x29,172] ldr x2, [x21,8] @@ -6185,102 +6257,102 @@ FlashReadPages: mov w0, w19 blr x4 mov w28, w0 - b .L935 -.L1003: + b .L945 +.L1013: ldr w1, [x29,172] mov w0, w19 ldr x2, [x21,8] ldr x3, [x21,16] bl FlashReadRawPage mov w28, w0 - b .L935 -.L954: + b .L945 +.L964: mov w20, 0 -.L934: +.L944: add x0, x22, :lo12:.LANCHOR0 ldrb w0, [x0,4044] add w0, w0, w0, lsl 1 cmp w28, w0, lsr 2 - bls .L935 + bls .L945 add x0, x24, :lo12:.LANCHOR2 ldr x0, [x0,664] cmp x0, xzr mov w0, 256 csel w28, w28, w0, ne -.L935: +.L945: cmp w28, 256 - beq .L959 + beq .L969 cmn w28, #1 - bne .L939 -.L959: + bne .L949 +.L969: str w28, [x26,x27] - b .L941 -.L939: + b .L951 +.L949: str wzr, [x26,x27] -.L941: +.L951: ldr w3, [x26,x27] cmn w3, #1 - bne .L943 + bne .L953 add x2, x22, :lo12:.LANCHOR0 ldr w1, [x21,4] ldr x0, [x29,128] ldrb w2, [x2,4044] bl printk ldr x1, [x21,16] - cbz x1, .L943 + cbz x1, .L953 mov w2, 4 ldr x0, [x29,120] mov w3, w2 bl rknand_print_hex -.L943: - cbz w20, .L945 +.L953: + cbz w20, .L955 add x0, x22, :lo12:.LANCHOR0 ldrb w0, [x0,4044] add w0, w0, w0, lsl 1 cmp w23, w0, lsr 2 - bls .L946 + bls .L956 add x24, x24, :lo12:.LANCHOR2 ldr x0, [x24,664] cmp x0, xzr mov w0, 256 csel w23, w23, w0, ne -.L946: +.L956: add w0, w25, 1 mov w1, 56 cmp w23, 256 umull x0, w0, w1 - beq .L960 + beq .L970 cmn w23, #1 - bne .L947 -.L960: + bne .L957 +.L970: str w23, [x26,x0] - b .L945 -.L947: + b .L955 +.L957: str wzr, [x26,x0] -.L945: +.L955: ldr w0, [x29,152] add w25, w25, w20 - cbz w0, .L915 + cbz w0, .L925 add x0, x22, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L915 + cbz w0, .L925 mov w0, w19 bl flash_exit_slc_mode -.L915: +.L925: add w25, w25, 1 - b .L912 -.L1002: + b .L922 +.L1012: mov w0, 0 - b .L1000 -.L925: + b .L1010 +.L935: mov w0, w19 bl NandcWaitFlashReady - cbz w20, .L922 + cbz w20, .L932 ldr w1, [x29,172] mov w0, w19 bl FlashReadDpDataOutCmd - b .L922 -.L1000: + b .L932 +.L1010: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -6324,18 +6396,18 @@ FlashLoadFactorBbt: str xzr, [x29,144] uxth w25, w25 str w0, [x29,124] -.L1005: +.L1015: add x1, x22, :lo12:.LANCHOR0 ldrb w1, [x1,1676] cmp w1, w19 - bls .L1015 + bls .L1025 mul w3, w19, w21 mov w20, w25 mov w4, 61664 -.L1006: +.L1016: ldr w0, [x29,124] cmp w20, w0 - ble .L1008 + ble .L1018 add w1, w3, w20 add x0, x29, 136 lsl w1, w1, 10 @@ -6349,12 +6421,12 @@ FlashLoadFactorBbt: ldr x3, [x29,112] cmn w0, #1 ldr x4, [x29,104] - beq .L1007 + beq .L1017 add x24, x23, :lo12:.LANCHOR2 ldr x0, [x24,696] ldrh w0, [x0] cmp w0, w4 - bne .L1007 + bne .L1017 add x24, x24, 728 mov x0, x26 mov w1, w19 @@ -6363,20 +6435,20 @@ FlashLoadFactorBbt: bl printk strh w20, [x24,w19,sxtw 1] uxth w28, w28 - b .L1008 -.L1007: + b .L1018 +.L1017: sub w20, w20, #1 uxth w20, w20 - b .L1006 -.L1008: + b .L1016 +.L1018: add x1, x22, :lo12:.LANCHOR0 add w19, w19, 1 uxtb w19, w19 ldrb w1, [x1,1676] cmp w1, w28 csel w27, w27, wzr, ne - b .L1005 -.L1015: + b .L1015 +.L1025: mov w0, w27 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -6417,9 +6489,9 @@ FlashReadFacBbtData: sub w19, w3, #16 mul w24, w23, w3 uxth w20, w20 -.L1017: +.L1027: cmp w20, w19 - ble .L1025 + ble .L1035 add w0, w20, w24 mov w1, 1 lsl w0, w0, 10 @@ -6429,26 +6501,26 @@ FlashReadFacBbtData: bl FlashReadPages ldr w0, [x29,88] cmn w0, #1 - beq .L1018 + beq .L1028 add x0, x21, :lo12:.LANCHOR2 ldr x0, [x0,696] ldrh w0, [x0] cmp w0, w26 - bne .L1018 + bne .L1028 mov w0, w22 - cbz x22, .L1019 + cbz x22, .L1029 mov x0, x22 mov w1, w23 mov w2, w25 bl FlashReadFacBbtData.part.6 - b .L1019 -.L1018: + b .L1029 +.L1028: sub w20, w20, #1 uxth w20, w20 - b .L1017 -.L1025: + b .L1027 +.L1035: mov w0, -1 -.L1019: +.L1029: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -6478,37 +6550,37 @@ FlashGetBadBlockList: lsr w2, w2, 3 bl FlashReadFacBbtData cmn w0, #1 - bne .L1027 -.L1031: + bne .L1037 +.L1041: mov w1, 0 - b .L1028 -.L1027: + b .L1038 +.L1037: mov w2, 0 lsr w0, w19, 4 mov w1, w2 sub w19, w19, #1 mov w5, 1 -.L1029: +.L1039: cmp w2, w19 - bge .L1028 + bge .L1038 add x3, x20, :lo12:.LANCHOR2 ubfx x4, x2, 5, 11 ldr x6, [x3,688] lsl w3, w5, w2 ldr w4, [x6,x4,lsl 2] tst w3, w4 - beq .L1030 + beq .L1040 add w3, w1, 1 ubfiz x1, x1, 1, 16 strh w2, [x21,x1] uxth w1, w3 -.L1030: +.L1040: cmp w1, w0 - bcs .L1031 + bcs .L1041 add w2, w2, 1 uxth w2, w2 - b .L1029 -.L1028: + b .L1039 +.L1038: ubfiz x1, x1, 1, 16 mov w0, -1 ldp x19, x20, [sp,16] @@ -6540,9 +6612,9 @@ FlashProgSlc2KPages: mov w25, 0 add x22, x22, :lo12:.LANCHOR0 mov w28, -1 -.L1037: +.L1047: cmp w25, w23 - beq .L1066 + beq .L1076 mov w1, w24 sub w4, w23, w25 mov x0, x21 @@ -6552,10 +6624,10 @@ FlashProgSlc2KPages: ldr w0, [x29,100] ldrb w1, [x22,1676] cmp w0, w1 - bcc .L1038 + bcc .L1048 str w28, [x21] - b .L1039 -.L1038: + b .L1049 +.L1048: add x0, x22, x0, uxtw ldrb w20, [x0,1680] mov w0, w20 @@ -6610,36 +6682,36 @@ FlashProgSlc2KPages: ldr w1, [x29,96] mov w0, w20 bl FlashReadStatus - tbz x0, 0, .L1042 + tbz x0, 0, .L1052 str w28, [x21] -.L1042: +.L1052: mov w0, w20 bl NandcFlashDeCs -.L1039: +.L1049: add w25, w25, 1 add x21, x21, 56 - b .L1037 -.L1066: + b .L1047 +.L1076: mov w21, 0 - cbz w27, .L1064 + cbz w27, .L1074 adrp x25, .LC23 adrp x26, .LC22 adrp x27, .LC21 add x25, x25, :lo12:.LC23 add x26, x26, :lo12:.LC22 add x27, x27, :lo12:.LC21 -.L1065: +.L1075: cmp w21, w23 - beq .L1064 + beq .L1074 ldr w0, [x19] cmn w0, #1 - bne .L1045 + bne .L1055 adrp x0, .LC20 ldr w1, [x19,4] add x0, x0, :lo12:.LC20 bl printk - b .L1046 -.L1045: + b .L1056 +.L1055: adrp x20, .LANCHOR2 sub w4, w23, w21 add x22, x20, :lo12:.LANCHOR2 @@ -6666,44 +6738,44 @@ FlashProgSlc2KPages: bl FlashReadPages ldr w22, [x29,104] cmn w22, #1 - bne .L1047 + bne .L1057 ldr w1, [x19,4] mov x0, x27 bl printk str w22, [x19] -.L1047: +.L1057: ldr x0, [x19,16] - cbz x0, .L1048 + cbz x0, .L1058 ldr w2, [x0] add x0, x20, :lo12:.LANCHOR2 ldr x0, [x0,712] ldr w3, [x0] cmp w2, w3 - beq .L1048 + beq .L1058 ldr w1, [x19,4] mov x0, x26 bl printk mov w0, -1 str w0, [x19] -.L1048: +.L1058: ldr x0, [x19,8] - cbz x0, .L1046 + cbz x0, .L1056 add x20, x20, :lo12:.LANCHOR2 ldr w2, [x0] ldr x0, [x20,704] ldr w3, [x0] cmp w2, w3 - beq .L1046 + beq .L1056 ldr w1, [x19,4] mov x0, x25 bl printk mov w0, -1 str w0, [x19] -.L1046: +.L1056: add w21, w21, 1 add x19, x19, 56 - b .L1065 -.L1064: + b .L1075 +.L1074: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -6736,18 +6808,18 @@ FlashProgPages: ldrb w4, [x4,24] ldrb w27, [x6,#:lo12:.LANCHOR1+265] ldrb w5, [x5,19] - cbz w4, .L1068 + cbz w4, .L1078 bl FlashProgSlc2KPages - b .L1069 -.L1068: + b .L1079 +.L1078: sub w0, w5, #1 adrp x28, .LANCHOR2 str w0, [x29,120] add x0, x28, :lo12:.LANCHOR2 str x0, [x29,112] -.L1120: +.L1130: cmp w22, w25 - bcs .L1121 + bcs .L1131 mov w20, 56 mov w1, w23 add x2, x29, 128 @@ -6762,11 +6834,11 @@ FlashProgPages: ldr w0, [x29,132] ldrb w2, [x1,1676] cmp w0, w2 - bcc .L1070 + bcc .L1080 mov w0, -1 str w0, [x19,x20] - b .L1071 -.L1070: + b .L1081 +.L1080: add x3, x28, :lo12:.LANCHOR2 uxtw x0, w0 ldrb w3, [x3,648] @@ -6775,15 +6847,15 @@ FlashProgPages: csel w24, w24, wzr, ne madd x0, x0, x3, x1 ldr x0, [x0,1728] - cbz x0, .L1073 + cbz x0, .L1083 cmp w2, 1 - bne .L1074 + bne .L1084 ldr x0, [x1,3976] bl NandcIqrWaitFlashReady -.L1074: +.L1084: ldrb w0, [x29,132] bl FlashWaitCmdDone -.L1073: +.L1083: add x0, x21, :lo12:.LANCHOR0 ldr w2, [x29,132] mov x1, 24 @@ -6793,13 +6865,13 @@ FlashProgPages: str x26, [x0,8] str xzr, [x0,16] str w1, [x0,4] - cbz w24, .L1075 + cbz w24, .L1085 add w1, w22, 1 mov w3, 56 umull x1, w1, w3 add x1, x19, x1 str x1, [x0,16] -.L1075: +.L1085: add x1, x21, :lo12:.LANCHOR0 add x0, x1, x2 ldrb w20, [x0,1680] @@ -6808,11 +6880,11 @@ FlashProgPages: ldrb w0, [x1,1676] strb w20, [x2,1720] cmp w0, 1 - bne .L1076 + bne .L1086 mov w0, w20 bl NandcWaitFlashReady - b .L1077 -.L1076: + b .L1087 +.L1086: mov w0, w20 str x1, [x29,104] bl NandcFlashCs @@ -6827,35 +6899,35 @@ FlashProgPages: bl FlashWaitReadyEN mov w0, w20 bl NandcFlashDeCs -.L1077: +.L1087: ldr w0, [x29,120] cmp w0, 6 - bhi .L1078 + bhi .L1088 ldr x0, [x29,112] add x0, x0, x20, sxtw ldrb w0, [x0,560] - cbz w0, .L1078 + cbz w0, .L1088 add x2, x21, :lo12:.LANCHOR0 mov w0, w20 add x2, x2, 4060 mov w3, 0 ldrb w1, [x2,-3] bl HynixSetRRPara -.L1078: +.L1088: mov w0, w20 bl NandcFlashCs cmp w23, 1 - bne .L1079 + bne .L1089 add x0, x21, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L1079 + cbz w0, .L1089 mov w0, w20 bl flash_enter_slc_mode - b .L1080 -.L1079: + b .L1090 +.L1089: mov w0, w20 bl flash_exit_slc_mode -.L1080: +.L1090: ldr w1, [x29,128] mov w0, w20 bl FlashProgFirstCmd @@ -6865,7 +6937,7 @@ FlashProgPages: mov w1, 1 mov w2, w27 bl NandcXferData - cbz w24, .L1081 + cbz w24, .L1091 ldr w1, [x29,128] mov w0, w20 add x26, x21, :lo12:.LANCHOR0 @@ -6893,45 +6965,45 @@ FlashProgPages: ldr x3, [x4,8] ldr x4, [x4,16] bl NandcXferData -.L1081: +.L1091: ldr w1, [x29,128] mov w0, w20 add w22, w22, w24 bl FlashProgSecondCmd mov w0, w20 bl NandcFlashDeCs -.L1071: +.L1081: add w22, w22, 1 - b .L1120 -.L1121: + b .L1130 +.L1131: add x21, x21, :lo12:.LANCHOR0 mov x20, 0 mov x22, 24 ldr x0, [x21,3976] bl NandcIqrWaitFlashReady -.L1083: +.L1093: ldrb w0, [x21,1676] cmp w0, w20 - bls .L1122 + bls .L1132 mov w0, w20 bl FlashWaitCmdDone cmp w23, 1 - bne .L1084 + bne .L1094 ldrb w0, [x21,136] - cbz w0, .L1084 + cbz w0, .L1094 madd x0, x20, x22, x21 ldrb w0, [x0,1720] bl flash_exit_slc_mode -.L1084: +.L1094: add x20, x20, 1 - b .L1083 -.L1122: + b .L1093 +.L1132: ldr w0, [x29,124] - cbnz w0, .L1086 -.L1094: + cbnz w0, .L1096 +.L1104: mov w0, 0 - b .L1069 -.L1086: + b .L1079 +.L1096: adrp x24, .LC23 adrp x26, .LC22 adrp x27, .LC21 @@ -6939,18 +7011,18 @@ FlashProgPages: add x24, x24, :lo12:.LC23 add x26, x26, :lo12:.LC22 add x27, x27, :lo12:.LC21 -.L1087: +.L1097: cmp w21, w25 - beq .L1094 + beq .L1104 ldr w0, [x19] cmn w0, #1 - bne .L1088 + bne .L1098 adrp x0, .LC20 ldr w1, [x19,4] add x0, x0, :lo12:.LC20 bl printk - b .L1089 -.L1088: + b .L1099 +.L1098: adrp x20, .LANCHOR2 sub w4, w25, w21 add x22, x20, :lo12:.LANCHOR2 @@ -6977,44 +7049,44 @@ FlashProgPages: bl FlashReadPages ldr w22, [x29,136] cmn w22, #1 - bne .L1090 + bne .L1100 ldr w1, [x19,4] mov x0, x27 bl printk str w22, [x19] -.L1090: +.L1100: ldr x0, [x19,16] - cbz x0, .L1091 + cbz x0, .L1101 ldr w2, [x0] add x0, x20, :lo12:.LANCHOR2 ldr x0, [x0,712] ldr w3, [x0] cmp w2, w3 - beq .L1091 + beq .L1101 ldr w1, [x19,4] mov x0, x26 bl printk mov w0, -1 str w0, [x19] -.L1091: +.L1101: ldr x0, [x19,8] - cbz x0, .L1089 + cbz x0, .L1099 add x20, x20, :lo12:.LANCHOR2 ldr w2, [x0] ldr x0, [x20,704] ldr w3, [x0] cmp w2, w3 - beq .L1089 + beq .L1099 ldr w1, [x19,4] mov x0, x24 bl printk mov w0, -1 str w0, [x19] -.L1089: +.L1099: add w21, w21, 1 add x19, x19, 56 - b .L1087 -.L1069: + b .L1097 +.L1079: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -7077,10 +7149,10 @@ FlashTestBlk: ldr w2, [x0,#:lo12:.LANCHOR0+8] mov w0, 0 cmp w1, w2 - bcc .L1125 + bcc .L1135 mov w0, w1 bl FlashTestBlk.part.7 -.L1125: +.L1135: ldp x29, x30, [sp], 16 ret .size FlashTestBlk, .-FlashTestBlk @@ -7137,17 +7209,17 @@ FlashMakeFactorBbt: sub w0, w22, #1 uxth w0, w0 str w0, [x29,132] -.L1129: +.L1139: add x23, x19, :lo12:.LANCHOR0 ldrb w0, [x23,1676] cmp w0, w20 - bls .L1180 + bls .L1190 ldr x0, [x29,136] sxtw x24, w20 add x0, x0, :lo12:.LANCHOR2 add x0, x0, 728 ldrh w21, [x0,w20,sxtw 1] - cbnz w21, .L1159 + cbnz w21, .L1169 ldrh w2, [x23,4036] mov w1, w21 ldr x0, [x19,#:lo12:.LANCHOR0] @@ -7161,15 +7233,15 @@ FlashMakeFactorBbt: and w0, w0, 4 uxtb w0, w0 str w0, [x29,128] -.L1131: +.L1141: uxth w28, w26 cmp w28, w22 - bcs .L1141 + bcs .L1151 mov w0, -1 strb w0, [x29,166] strb w0, [x29,167] ldr w0, [x29,124] - cbz w0, .L1133 + cbz w0, .L1143 add x4, x19, :lo12:.LANCHOR0 add x2, x29, 166 add x0, x4, 1688 @@ -7184,7 +7256,7 @@ FlashMakeFactorBbt: ldr x3, [x29,112] ldrb w0, [x4,24] cmp w0, 1 - bne .L1133 + bne .L1143 ldr w1, [x4,28] mov w0, w27 add x2, x29, 167 @@ -7194,9 +7266,9 @@ FlashMakeFactorBbt: ldrb w1, [x29,167] and w0, w1, w0 strb w0, [x29,166] -.L1133: +.L1143: ldr w0, [x29,120] - cbz w0, .L1135 + cbz w0, .L1145 add x0, x19, :lo12:.LANCHOR0 add x2, x29, 167 add x0, x0, 1688 @@ -7208,40 +7280,40 @@ FlashMakeFactorBbt: mov w0, w27 add w1, w1, w21 bl FlashReadSpare -.L1135: +.L1145: add x0, x19, :lo12:.LANCHOR0 ldrb w1, [x29,166] ldr x0, [x0,1912] ldrb w0, [x0,7] cmp w0, 8 - beq .L1160 + beq .L1170 cmp w0, 1 - bne .L1136 -.L1160: + bne .L1146 +.L1170: mov w0, 1 - cbz w1, .L1138 + cbz w1, .L1148 ldrb w0, [x29,167] cmp w0, wzr cset w0, eq - b .L1138 -.L1136: + b .L1148 +.L1146: cmp w1, 255 mov w0, 1 - bne .L1138 + bne .L1148 ldrb w0, [x29,167] cmp w0, 255 cset w0, ne -.L1138: +.L1148: ldr w1, [x29,128] - cbz w1, .L1139 + cbz w1, .L1149 add x0, x19, :lo12:.LANCHOR0 add x0, x0, 1688 ldr w1, [x0,x24,lsl 2] mov w0, w27 add w1, w21, w1 bl SandiskProgTestBadBlock -.L1139: - cbz w0, .L1140 +.L1149: + cbz w0, .L1150 adrp x0, .LC25 mov w1, w20 mov w2, w26 @@ -7262,12 +7334,12 @@ FlashMakeFactorBbt: ldrb w0, [x2,1676] mul w0, w1, w0 cmp w23, w0 - bgt .L1141 -.L1140: + bgt .L1151 +.L1150: add w26, w26, 1 add w21, w21, w25 - b .L1131 -.L1141: + b .L1141 +.L1151: adrp x0, .LC26 mov w1, w20 mov w2, w23 @@ -7278,28 +7350,28 @@ FlashMakeFactorBbt: ldrb w0, [x1,1676] mul w0, w2, w0 cmp w23, w0 - blt .L1143 + blt .L1153 ldrh w2, [x1,4036] mov w1, 0 ldr x0, [x19,#:lo12:.LANCHOR0] lsl w2, w2, 9 bl ftl_memset -.L1143: - cbnz w20, .L1145 +.L1153: + cbnz w20, .L1155 add x0, x19, :lo12:.LANCHOR0 adrp x26, .LC27 mov w21, w20 add x26, x26, :lo12:.LC27 mov w23, 1 ldrh w27, [x0,8] -.L1146: +.L1156: add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,25] cmp w0, w27 - bls .L1181 + bls .L1191 mov w0, w27 bl FlashTestBlk - cbz w0, .L1147 + cbz w0, .L1157 mov w1, w27 mov x0, x26 add w21, w21, 1 @@ -7312,22 +7384,22 @@ FlashMakeFactorBbt: ldr w3, [x2,x1] orr w0, w3, w0 str w0, [x2,x1] -.L1147: +.L1157: add w27, w27, 1 uxth w27, w27 - b .L1146 -.L1181: + b .L1156 +.L1191: adrp x26, .LC27 ldr w28, [x29,132] sub w27, w22, #50 add x26, x26, :lo12:.LC27 mov w23, 1 -.L1149: +.L1159: cmp w28, w27 - ble .L1182 + ble .L1192 mov w0, w28 bl FlashTestBlk - cbz w0, .L1150 + cbz w0, .L1160 mov w1, w28 mov x0, x26 bl printk @@ -7338,23 +7410,23 @@ FlashMakeFactorBbt: ldr w3, [x2,x1] orr w0, w3, w0 str w0, [x2,x1] -.L1150: +.L1160: sub w28, w28, #1 uxth w28, w28 - b .L1149 -.L1182: + b .L1159 +.L1192: add x0, x19, :lo12:.LANCHOR0 ldrb w1, [x0,25] ldr w2, [x0,8] sub w1, w1, w2 cmp w21, w1 - bcc .L1145 + bcc .L1155 ldrh w2, [x0,4036] mov w1, 0 ldr x0, [x19,#:lo12:.LANCHOR0] lsl w2, w2, 9 bl ftl_memset -.L1145: +.L1155: ldr x0, [x29,136] adrp x23, .LC28 ldr w27, [x29,132] @@ -7362,22 +7434,22 @@ FlashMakeFactorBbt: mul w26, w20, w22 add x28, x0, :lo12:.LANCHOR2 mov w21, -3872 -.L1153: +.L1163: mov w2, w27 mov x0, x23 mov w1, w20 bl printk ldr x2, [x19,#:lo12:.LANCHOR0] -.L1154: +.L1164: ubfx x0, x27, 5, 11 ldr w0, [x2,x0,lsl 2] lsr w0, w0, w27 and w1, w0, 1 - tbz x0, 0, .L1183 + tbz x0, 0, .L1193 sub w27, w27, #1 uxth w27, w27 - b .L1154 -.L1183: + b .L1164 +.L1193: add x0, x28, 728 strh w27, [x0,x24,lsl 1] ldr x0, [x29,152] @@ -7401,15 +7473,15 @@ FlashMakeFactorBbt: mov w3, w1 bl FlashProgPages ldr w0, [x29,168] - cbz w0, .L1159 + cbz w0, .L1169 sub w27, w27, #1 uxth w27, w27 - b .L1153 -.L1159: + b .L1163 +.L1169: add w20, w20, 1 uxtb w20, w20 - b .L1129 -.L1180: + b .L1139 +.L1190: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -7424,14 +7496,14 @@ FlashMakeFactorBbt: Ftl_log2: mov w2, 1 mov w1, 0 -.L1185: +.L1195: cmp w2, w0 - bhi .L1187 + bhi .L1197 add w1, w1, 1 lsl w2, w2, 1 uxth w1, w1 - b .L1185 -.L1187: + b .L1195 +.L1197: sub w0, w1, #1 ret .size Ftl_log2, .-Ftl_log2 @@ -7487,30 +7559,30 @@ FtlConstantsInit: strh w2, [x0,770] strh w1, [x0,772] strh w4, [x0,758] -.L1192: +.L1202: add x5, x0, 776 strb w3, [x3,x5] add x3, x3, 1 cmp x3, 32 - bne .L1192 + bne .L1202 ldrh w3, [x24,20] ldrb w0, [x24,15] cmp w3, w0 - bcs .L1193 + bcs .L1203 uxtb w8, w1 mov w3, 0 mul w11, w1, w2 ubfiz w10, w8, 1, 7 add x12, x19, :lo12:.LANCHOR2 -.L1194: +.L1204: cmp w3, w1 - bcs .L1196 + bcs .L1206 uxtb w0, w3 mov w5, w3 mov w7, 0 -.L1197: +.L1207: cmp w7, w2 - bcs .L1219 + bcs .L1229 add x9, x12, 776 add w13, w5, w11 add w14, w0, w8 @@ -7520,35 +7592,35 @@ FtlConstantsInit: strb w14, [x9,x13] add w5, w5, w1 uxtb w0, w0 - b .L1197 -.L1219: + b .L1207 +.L1229: add w3, w3, 1 - b .L1194 -.L1196: + b .L1204 +.L1206: add x0, x19, :lo12:.LANCHOR2 lsl w2, w2, 1 lsr w4, w4, 1 strh w2, [x0,770] strh w4, [x0,758] -.L1193: +.L1203: add x0, x19, :lo12:.LANCHOR2 mov w2, 5 cmp w6, 1 strh w2, [x0,808] strh wzr, [x0,810] - bne .L1198 + bne .L1208 strh w6, [x0,808] -.L1198: +.L1208: add x0, x19, :lo12:.LANCHOR2 mov w2, 4352 adrp x22, .LANCHOR0 strh w2, [x0,812] add x2, x22, :lo12:.LANCHOR0 ldrb w27, [x2,24] - cbz w27, .L1199 + cbz w27, .L1209 mov w2, 384 strh w2, [x0,812] -.L1199: +.L1209: add x21, x19, :lo12:.LANCHOR2 ldrh w20, [x21,758] ldrh w23, [x21,770] @@ -7582,10 +7654,10 @@ FtlConstantsInit: mul w0, w23, w20 strh w2, [x21,830] str w0, [x21,764] - bls .L1200 + bls .L1210 and w0, w20, 255 strh w0, [x21,810] -.L1200: +.L1210: add x2, x19, :lo12:.LANCHOR2 mul w0, w25, w28 ldrh w1, [x2,810] @@ -7600,15 +7672,15 @@ FtlConstantsInit: sdiv w0, w1, w0 uxth w0, w0 cmp w0, 4 - bhi .L1216 + bhi .L1226 mov w0, 4 -.L1216: +.L1226: strh w0, [x2,840] - cbz w27, .L1203 + cbz w27, .L1213 add x0, x19, :lo12:.LANCHOR2 mov w1, 640 strh w1, [x0,812] -.L1203: +.L1213: add x1, x19, :lo12:.LANCHOR2 lsl w20, w20, 6 cmp w23, 1 @@ -7626,9 +7698,9 @@ FtlConstantsInit: ldrh w0, [x1,840] udiv w0, w0, w23 add w20, w20, w0 - bne .L1217 + bne .L1227 add w20, w20, 4 -.L1217: +.L1227: str w20, [x1,744] add x20, x19, :lo12:.LANCHOR2 add x22, x22, :lo12:.LANCHOR0 @@ -7658,18 +7730,18 @@ FtlConstantsInit: ldr w1, [x20,848] add w4, w1, 3 str w4, [x20,848] - cbz w5, .L1206 + cbz w5, .L1216 add w2, w2, 4 add w1, w1, 5 strh w2, [x20,840] - b .L1218 -.L1206: + b .L1228 +.L1216: cmp w4, 7 - bhi .L1207 + bhi .L1217 mov w1, 8 -.L1218: +.L1228: str w1, [x20,848] -.L1207: +.L1217: add x19, x19, :lo12:.LANCHOR2 ldrh w1, [x19,756] strh wzr, [x19,860] @@ -7678,10 +7750,10 @@ FtlConstantsInit: add w1, w1, 52 add w0, w1, w0, lsl 2 cmp w0, w3, lsl 9 - bcs .L1208 + bcs .L1218 mov w0, 1 strh w0, [x19,860] -.L1208: +.L1218: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -7743,9 +7815,9 @@ FtlMemInit: strh wzr, [x0,962] str w2, [x0,964] cmp w2, w1 - bls .L1221 + bls .L1231 str w1, [x0,964] -.L1221: +.L1231: add x19, x20, :lo12:.LANCHOR2 mov w22, 56 ldrh w0, [x19,822] @@ -7929,106 +8001,106 @@ FtlMemInit: ldrh w5, [x19,770] mov w0, 1 mov w2, w4 -.L1222: +.L1232: cmp w0, w5 add x1, x1, 8 - bcs .L1322 + bcs .L1332 ldr x3, [x19,1328] add w0, w0, 1 add x3, x3, x2, uxtw 2 add w2, w2, w4 str x3, [x1,32] - b .L1222 -.L1322: + b .L1232 +.L1332: add x1, x20, :lo12:.LANCHOR2 -.L1224: +.L1234: cmp w0, 8 - beq .L1323 + beq .L1333 add x2, x1, x0, uxtw 3 add w0, w0, 1 str xzr, [x2,1328] - b .L1224 -.L1323: + b .L1234 +.L1333: add x0, x20, :lo12:.LANCHOR2 ldr x1, [x0,1192] - cbnz x1, .L1226 -.L1228: + cbnz x1, .L1236 +.L1238: adrp x0, .LC29 adrp x1, .LANCHOR3 add x0, x0, :lo12:.LC29 add x1, x1, :lo12:.LANCHOR3 bl printk mov w0, -1 - b .L1227 -.L1226: + b .L1237 +.L1236: ldr x1, [x0,1200] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1240] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1256] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1264] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1272] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1280] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1328] - cbz x1, .L1228 + cbz x1, .L1238 ldr x0, [x0,1184] - cbz x0, .L1228 + cbz x0, .L1238 add x0, x20, :lo12:.LANCHOR2 ldr x1, [x0,976] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,984] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,992] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1008] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1016] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1024] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1000] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1048] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1056] - cbz x1, .L1228 + cbz x1, .L1238 ldr x0, [x0,1064] - cbz x0, .L1228 + cbz x0, .L1238 add x0, x20, :lo12:.LANCHOR2 ldr x1, [x0,1072] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1088] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1096] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1104] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1112] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1120] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1128] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1168] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1152] - cbz x1, .L1228 + cbz x1, .L1238 ldr x0, [x0,1208] - cbz x0, .L1228 + cbz x0, .L1238 adrp x0, .LANCHOR2 add x0, x0, :lo12:.LANCHOR2 ldr x1, [x0,1216] - cbz x1, .L1228 + cbz x1, .L1238 ldr x1, [x0,1224] - cbz x1, .L1228 + cbz x1, .L1238 ldr x0, [x0,1232] - cbz x0, .L1228 + cbz x0, .L1238 mov w0, 0 -.L1227: +.L1237: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldr x23, [sp,48] @@ -8044,23 +8116,23 @@ IsBlkInVendorPart: add x1, x1, :lo12:.LANCHOR2 mov w0, 0 ldrh w2, [x1,1392] - cbz w2, .L1325 + cbz w2, .L1335 ldrh w2, [x1,840] ldr x3, [x1,1208] mov x1, 0 -.L1326: +.L1336: cmp w2, w1, uxth - bls .L1331 + bls .L1341 add x1, x1, 1 add x0, x3, x1, lsl 1 ldrh w0, [x0,-2] cmp w0, w4 - bne .L1326 + bne .L1336 mov w0, 1 - b .L1325 -.L1331: + b .L1335 +.L1341: mov w0, 0 -.L1325: +.L1335: ret .size IsBlkInVendorPart, .-IsBlkInVendorPart .align 2 @@ -8072,25 +8144,25 @@ FtlCacheMetchLpa: add x2, x2, :lo12:.LANCHOR2 mov w0, 0 ldr w3, [x2,968] - cbz w3, .L1333 + cbz w3, .L1343 ldr x5, [x2,1032] mov x0, 56 mov x2, 0 -.L1334: +.L1344: cmp w3, w2 - bls .L1343 + bls .L1353 madd x4, x2, x0, x5 add x2, x2, 1 ldr w4, [x4,24] cmp w4, w6 - bcc .L1334 + bcc .L1344 cmp w4, w1 - bhi .L1334 + bhi .L1344 mov w0, 1 - b .L1333 -.L1343: + b .L1343 +.L1353: mov w0, 0 -.L1333: +.L1343: ret .size FtlCacheMetchLpa, .-FtlCacheMetchLpa .align 2 @@ -8195,10 +8267,10 @@ FtlBbt2Bitmap: mov x3, 0 mov w0, 65535 mov w5, 1 -.L1352: +.L1362: ldrh w2, [x20,x3] cmp w2, w0 - beq .L1350 + beq .L1360 ubfx x4, x2, 5, 11 add x3, x3, 2 lsl x4, x4, 2 @@ -8207,8 +8279,8 @@ FtlBbt2Bitmap: ldr w1, [x19,x4] orr w2, w1, w2 str w2, [x19,x4] - bne .L1352 -.L1350: + bne .L1362 +.L1360: ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 ret @@ -8226,7 +8298,7 @@ FtlBbmTblFlush: stp x23, x24, [sp,48] ldr w1, [x19,1400] stp x25, x26, [sp,64] - cbnz w1, .L1357 + cbnz w1, .L1367 ldr x0, [x19,1048] mov x22, 0 ldr x3, [x19,1112] @@ -8235,13 +8307,13 @@ FtlBbmTblFlush: str x0, [x19,1416] str x3, [x19,1424] bl ftl_memset -.L1358: +.L1368: ldrh w1, [x19,770] mov w0, w22 add x20, x19, 1408 add x22, x22, 1 cmp w0, w1 - bge .L1366 + bge .L1376 add x1, x21, x22, lsl 3 ldrh w2, [x19,1288] ldr x3, [x20,8] @@ -8250,8 +8322,8 @@ FtlBbmTblFlush: add x0, x3, x0, sxtw 2 lsl w2, w2, 2 bl ftl_memcpy - b .L1358 -.L1366: + b .L1368 +.L1376: ldr x25, [x20,16] mov w1, 255 mov w2, 16 @@ -8275,7 +8347,7 @@ FtlBbmTblFlush: strh w0, [x25,10] ldr w0, [x19,744] strh w0, [x25,12] -.L1360: +.L1370: ldr x0, [x19,1048] str x0, [x20,8] ldrh w1, [x19,1296] @@ -8298,7 +8370,7 @@ FtlBbmTblFlush: ldrh w0, [x19,1298] sub w1, w1, #1 cmp w0, w1 - blt .L1361 + blt .L1371 ldr w1, [x19,1304] ldrh w0, [x19,1296] add w1, w1, 1 @@ -8322,20 +8394,20 @@ FtlBbmTblFlush: mov w2, w1 mov w3, w1 bl FlashProgPages -.L1361: +.L1371: ldrh w1, [x19,1298] ldr w0, [x20] add w1, w1, 1 strh w1, [x19,1298] cmn w0, #1 - bne .L1362 + bne .L1372 ldr w1, [x20,4] mov x0, x24 add w26, w26, 1 bl printk uxth w26, w26 cmp w26, 3 - bls .L1360 + bls .L1370 adrp x0, .LC33 ldr w1, [x20,4] add x0, x0, :lo12:.LC33 @@ -8343,12 +8415,12 @@ FtlBbmTblFlush: bl printk mov w0, 1 str w0, [x19,1400] - b .L1357 -.L1362: - cbnz w23, .L1357 + b .L1367 +.L1372: + cbnz w23, .L1367 mov w23, 1 - b .L1360 -.L1357: + b .L1370 +.L1367: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -8379,19 +8451,19 @@ FtlLoadFactoryBbt: mov w25, -1 str x24, [x21,16] mov w26, 61664 -.L1368: +.L1378: ldrh w0, [x19,770] cmp w22, w0 - bcs .L1377 + bcs .L1387 ldrh w20, [x19,814] strh w25, [x23,12] -.L1370: +.L1380: sub w20, w20, #1 ldrh w0, [x19,814] uxth w20, w20 sub w1, w0, #16 cmp w20, w1 - ble .L1371 + ble .L1381 madd w0, w22, w0, w20 mov w1, 1 lsl w0, w0, 10 @@ -8401,16 +8473,16 @@ FtlLoadFactoryBbt: bl FlashReadPages ldr w0, [x21] cmn w0, #1 - beq .L1370 + beq .L1380 ldrh w0, [x24] cmp w0, w26 - bne .L1370 + bne .L1380 strh w20, [x23,12] -.L1371: +.L1381: add w22, w22, 1 add x23, x23, 2 - b .L1368 -.L1377: + b .L1378 +.L1387: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -8452,19 +8524,19 @@ FtlBbtCalcTotleCnt: ldrh w1, [x0,814] ldrh w21, [x0,770] mul w21, w1, w21 -.L1380: +.L1390: cmp w20, w21 - bge .L1386 + bge .L1396 mov w0, w20 bl FtlBbmIsBadBlock - cbz w0, .L1381 + cbz w0, .L1391 add w19, w19, 1 uxth w19, w19 -.L1381: +.L1391: add w20, w20, 1 uxth w20, w20 - b .L1380 -.L1386: + b .L1390 +.L1396: mov w0, w19 ldr x21, [sp,32] ldp x19, x20, [sp,16] @@ -8486,7 +8558,7 @@ FtlMakeBbt: stp x27, x28, [sp,80] mov x21, x19 ldr w22, [x20,1400] - cbnz w22, .L1388 + cbnz w22, .L1398 add x24, x20, 1296 mov x19, x20 mov x25, x24 @@ -8494,10 +8566,10 @@ FtlMakeBbt: mov w28, -3872 bl FtlBbtMemInit bl FtlLoadFactoryBbt -.L1389: +.L1399: ldrh w0, [x19,770] cmp w22, w0 - bcs .L1407 + bcs .L1417 ldrh w4, [x25,12] mov w1, 65535 ldr x0, [x19,1048] @@ -8505,7 +8577,7 @@ FtlMakeBbt: cmp w4, w1 str x0, [x20,8] str x26, [x20,16] - beq .L1390 + beq .L1400 ldrh w0, [x19,814] mov w1, 1 mov w2, w1 @@ -8520,23 +8592,23 @@ FtlMakeBbt: ldr x1, [x20,8] lsr w2, w2, 3 bl ftl_memcpy - b .L1391 -.L1390: + b .L1401 +.L1400: mov w1, w22 bl FlashGetBadBlockList ldr x0, [x20,8] ldr x1, [x24,32] bl FtlBbt2Bitmap ldrh w23, [x19,814] -.L1393: +.L1403: sub w23, w23, #1 uxth w23, w23 -.L1392: +.L1402: ldrh w0, [x19,814] madd w0, w22, w0, w23 bl FtlBbmIsBadBlock cmp w0, 1 - beq .L1393 + beq .L1403 ldr x0, [x19,1112] mov w1, 0 mov w2, 16 @@ -8567,64 +8639,64 @@ FtlMakeBbt: bl FlashProgPages ldr w0, [x20] cmn w0, #1 - bne .L1391 + bne .L1401 mov w0, w27 bl FtlBbmMapBadBlock - b .L1392 -.L1391: + b .L1402 +.L1401: mov w0, w27 add w22, w22, 1 add x24, x24, 8 add x25, x25, 2 bl FtlBbmMapBadBlock - b .L1389 -.L1407: + b .L1399 +.L1417: mov w19, 0 -.L1396: +.L1406: add x20, x21, :lo12:.LANCHOR2 ldrh w0, [x20,832] cmp w0, w19 - bls .L1408 + bls .L1418 mov w0, w19 add w19, w19, 1 bl FtlBbmMapBadBlock uxth w19, w19 - b .L1396 -.L1408: + b .L1406 +.L1418: ldrh w19, [x20,1308] mov w23, 65535 sub w19, w19, #1 uxth w19, w19 -.L1398: +.L1408: add x22, x20, 1296 ldrh w0, [x22,12] sub w0, w0, #48 cmp w19, w0 - ble .L1402 + ble .L1412 mov w0, w19 bl FtlBbmIsBadBlock cmp w0, 1 - beq .L1399 + beq .L1409 mov w0, w19 bl FlashTestBlk - cbz w0, .L1400 + cbz w0, .L1410 mov w0, w19 bl FtlBbmMapBadBlock - b .L1399 -.L1400: + b .L1409 +.L1410: ldrh w0, [x20,1296] cmp w0, w23 - bne .L1401 + bne .L1411 strh w19, [x20,1296] - b .L1399 -.L1401: + b .L1409 +.L1411: strh w19, [x22,4] - b .L1402 -.L1399: + b .L1412 +.L1409: sub w19, w19, #1 uxth w19, w19 - b .L1398 -.L1402: + b .L1408 +.L1412: add x19, x21, :lo12:.LANCHOR2 mov w2, 2 ldr x1, [x19,1016] @@ -8653,7 +8725,7 @@ FtlMakeBbt: strh w0, [x19,1300] strh w1, [x19,1296] bl FtlBbmTblFlush -.L1388: +.L1398: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -8715,16 +8787,16 @@ P2V_block_in_plane: ftl_cmp_data_ver: cmp w0, w1 mov w2, -2147483648 - bls .L1413 + bls .L1423 sub w1, w0, w1 cmp w1, w2 cset w0, ls - b .L1414 -.L1413: + b .L1424 +.L1423: sub w1, w1, w0 cmp w1, w2 cset w0, hi -.L1414: +.L1424: ret .size ftl_cmp_data_ver, .-ftl_cmp_data_ver .align 2 @@ -8741,12 +8813,12 @@ FtlGetLastWrittenPage: str x25, [sp,64] mov w23, w1 add x3, x3, :lo12:.LANCHOR2 - bne .L1416 + bne .L1426 ldrh w19, [x3,820] - b .L1417 -.L1416: + b .L1427 +.L1426: ldrh w19, [x3,818] -.L1417: +.L1427: sub w19, w19, #1 lsl w21, w0, 10 mov w1, 1 @@ -8761,12 +8833,12 @@ FtlGetLastWrittenPage: bl FlashReadPages ldr w0, [x29,144] cmn w0, #1 - bne .L1418 + bne .L1428 mov w22, 0 mov w25, 2 -.L1419: +.L1429: cmp w22, w19 - bgt .L1418 + bgt .L1428 add w3, w22, w19 mov w1, 1 mov w2, w23 @@ -8778,21 +8850,21 @@ FtlGetLastWrittenPage: bl FlashReadPages ldr w0, [x24] cmn w0, #1 - bne .L1420 + bne .L1430 ldr w0, [x24,4] cmn w0, #1 - bne .L1420 + bne .L1430 ldr w0, [x29,88] cmn w0, #1 - beq .L1420 + beq .L1430 sub w19, w20, #1 sxth w19, w19 - b .L1419 -.L1420: + b .L1429 +.L1430: add w20, w20, 1 sxth w22, w20 - b .L1419 -.L1418: + b .L1429 +.L1428: mov w0, w19 ldr x25, [sp,64] ldp x19, x20, [sp,16] @@ -8822,11 +8894,11 @@ FtlLoadBbt: ldrh w20, [x23,814] sub w20, w20, #1 uxth w20, w20 -.L1427: +.L1437: ldrh w0, [x23,814] sub w0, w0, #48 cmp w20, w0 - ble .L1430 + ble .L1440 lsl w0, w20, 10 mov w1, 1 str w0, [x21,4] @@ -8835,7 +8907,7 @@ FtlLoadBbt: bl FlashReadPages ldr w0, [x21] cmn w0, #1 - bne .L1428 + bne .L1438 ldr w0, [x21,4] mov w1, 1 mov w2, w1 @@ -8843,33 +8915,33 @@ FtlLoadBbt: str w0, [x21,4] mov x0, x21 bl FlashReadPages -.L1428: +.L1438: ldr w0, [x21] cmn w0, #1 - beq .L1429 + beq .L1439 ldrh w0, [x22] cmp w0, w24 - bne .L1429 + bne .L1439 ldr w1, [x22,4] str w1, [x23,1304] strh w20, [x23,1296] ldrh w1, [x22,8] strh w1, [x23,1300] - b .L1430 -.L1429: + b .L1440 +.L1439: sub w20, w20, #1 uxth w20, w20 - b .L1427 -.L1430: + b .L1437 +.L1440: add x21, x19, :lo12:.LANCHOR2 mov w2, 65535 mov w0, -1 ldrh w1, [x21,1296] cmp w1, w2 - beq .L1432 + beq .L1442 ldrh w1, [x21,1300] cmp w1, w2 - beq .L1434 + beq .L1444 add x0, x21, 1408 lsl w1, w1, 10 str w1, [x0,4] @@ -8878,21 +8950,21 @@ FtlLoadBbt: bl FlashReadPages ldr w0, [x21,1408] cmn w0, #1 - beq .L1434 + beq .L1444 ldrh w1, [x22] mov w0, 61649 cmp w1, w0 - bne .L1434 + bne .L1444 ldr w0, [x22,4] ldr w1, [x21,1304] cmp w0, w1 - bls .L1434 + bls .L1444 str w0, [x21,1304] ldrh w1, [x21,1300] ldrh w0, [x22,8] strh w1, [x21,1296] strh w0, [x21,1300] -.L1434: +.L1444: add x20, x19, :lo12:.LANCHOR2 mov w1, 1 add x23, x20, 1408 @@ -8902,8 +8974,8 @@ FtlLoadBbt: sxth w21, w0 add w0, w0, 1 strh w0, [x20,1298] -.L1436: - tbnz w21, #31, .L1441 +.L1446: + tbnz w21, #31, .L1451 ldrh w0, [x20,1296] mov w1, 1 mov w2, w1 @@ -8915,44 +8987,44 @@ FtlLoadBbt: bl FlashReadPages ldr w0, [x23] cmn w0, #1 - beq .L1437 + beq .L1447 ldrh w0, [x22] cmp w0, w24 - bne .L1437 -.L1441: + bne .L1447 +.L1451: add x1, x19, :lo12:.LANCHOR2 ldrh w0, [x22,10] mov w2, 65535 strh w0, [x1,1302] ldrh w0, [x22,12] cmp w0, w2 - bne .L1438 - b .L1439 -.L1437: + bne .L1448 + b .L1449 +.L1447: sub w21, w21, #1 sxth w21, w21 - b .L1436 -.L1438: + b .L1446 +.L1448: ldr w2, [x1,744] cmp w0, w2 - beq .L1439 + beq .L1449 ldrh w1, [x1,758] lsr w1, w1, 2 cmp w0, w1 - bcs .L1439 + bcs .L1449 cmp w2, w1 - bcs .L1439 + bcs .L1449 bl FtlSysBlkNumInit -.L1439: +.L1449: add x19, x19, :lo12:.LANCHOR2 mov x20, 0 add x21, x19, 1296 -.L1442: +.L1452: ldrh w0, [x19,770] mov w1, w20 add x20, x20, 1 cmp w1, w0 - bcs .L1460 + bcs .L1470 ldrh w2, [x19,1288] add x0, x21, x20, lsl 3 ldr x3, [x19,1416] @@ -8961,10 +9033,10 @@ FtlLoadBbt: lsl w2, w2, 2 add x1, x3, x1, lsl 2 bl ftl_memcpy - b .L1442 -.L1460: + b .L1452 +.L1470: mov w0, 0 -.L1432: +.L1442: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -9016,39 +9088,43 @@ FtlFreeSysBlkQueueFull: .type FtlFreeSysBlkQueueIn, %function FtlFreeSysBlkQueueIn: stp x29, x30, [sp, -48]! - adrp x2, .LANCHOR2 uxth w1, w1 add x29, sp, 0 + stp x21, x22, [sp,32] stp x19, x20, [sp,16] + uxth w21, w0 + mov w0, 65533 + sub w2, w21, #1 + cmp w0, w2, uxth + bcc .L1474 + adrp x2, .LANCHOR2 add x20, x2, :lo12:.LANCHOR2 mov x19, x2 - stp x21, x22, [sp,32] - uxth w22, w0 ldrh w0, [x20,1470] cmp w0, 1024 - beq .L1464 - cbz w1, .L1466 + beq .L1474 + cbz w1, .L1476 ldr w0, [x20,1400] - cbnz w0, .L1466 - mov w0, w22 + cbnz w0, .L1476 + mov w0, w21 bl P2V_block_in_plane - uxth w21, w0 + uxth w22, w0 ldr x0, [x20,1016] - lsl w1, w22, 10 + lsl w1, w21, 10 str w1, [x0,4] mov w1, 1 mov w2, w1 ldr x0, [x20,1016] bl FlashEraseBlocks - ubfiz x1, x21, 1, 16 + ubfiz x0, x22, 1, 16 ldr x2, [x20,1168] - ldrh w0, [x2,x1] - add w0, w0, 1 - strh w0, [x2,x1] + ldrh w1, [x2,x0] + add w1, w1, 1 + strh w1, [x2,x0] ldr w0, [x20,912] add w0, w0, 1 str w0, [x20,912] -.L1466: +.L1476: add x1, x19, :lo12:.LANCHOR2 add x1, x1, 1464 ldrh w0, [x1,6] @@ -9058,9 +9134,9 @@ FtlFreeSysBlkQueueIn: add x0, x1, x2, sxtw 1 add w2, w2, 1 and w2, w2, 1023 - strh w22, [x0,8] + strh w21, [x0,8] strh w2, [x1,4] -.L1464: +.L1474: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x29, x30, [sp], 48 @@ -9085,7 +9161,7 @@ FtlLowFormatEraseBlock: ldr w2, [x3,1400] str w0, [x29,120] mov w0, 0 - cbnz w2, .L1474 + cbnz w2, .L1484 adrp x28, .LANCHOR0 str w25, [x3,944] add x0, x28, :lo12:.LANCHOR0 @@ -9096,10 +9172,10 @@ FtlLowFormatEraseBlock: mov w23, 56 ldrb w0, [x0,136] str w0, [x29,124] -.L1475: +.L1485: ldrh w0, [x26,748] cmp w0, w27 - bls .L1519 + bls .L1529 umull x0, w27, w23 ldr x1, [x26,1016] str wzr, [x1,x0] @@ -9109,15 +9185,15 @@ FtlLowFormatEraseBlock: bl V2P_block uxth w22, w0 mov w1, w22 - cbz w24, .L1476 + cbz w24, .L1486 str x1, [x29,112] bl IsBlkInVendorPart ldr x1, [x29,112] - cbnz w0, .L1477 -.L1476: + cbnz w0, .L1487 +.L1486: mov w0, w1 bl FtlBbmIsBadBlock - cbnz w0, .L1478 + cbnz w0, .L1488 umull x0, w20, w23 ldr x1, [x26,1016] lsl w22, w22, 10 @@ -9135,16 +9211,16 @@ FtlLowFormatEraseBlock: uxth w20, w20 add x0, x4, x0, sxtw 2 str x0, [x1,16] - b .L1477 -.L1478: + b .L1487 +.L1488: add w19, w19, 1 uxth w19, w19 -.L1477: +.L1487: add w2, w27, 1 uxth w27, w2 - b .L1475 -.L1519: - cbz w20, .L1498 + b .L1485 +.L1529: + cbz w20, .L1508 ldr w0, [x29,124] mov w2, w20 strb wzr, [x26,648] @@ -9157,55 +9233,55 @@ FtlLowFormatEraseBlock: ldrb w0, [x29,120] strb w0, [x26,648] mov x26, 56 -.L1481: +.L1491: cmp w20, w23, uxth - bls .L1520 + bls .L1530 add x1, x21, :lo12:.LANCHOR2 mul x0, x23, x26 ldr x1, [x1,1016] add x2, x1, x0 ldr w0, [x1,x0] cmn w0, #1 - bne .L1482 + bne .L1492 ldr w0, [x2,4] add w19, w19, 1 lsr w0, w0, 10 uxth w19, w19 bl FtlBbmMapBadBlock -.L1482: +.L1492: add x23, x23, 1 - b .L1481 -.L1520: - cbnz w24, .L1484 + b .L1491 +.L1530: + cbnz w24, .L1494 mov w0, 1 uxth w22, w22 mov w27, 6 str w0, [x29,124] - b .L1485 -.L1484: + b .L1495 +.L1494: add x0, x21, :lo12:.LANCHOR2 add x28, x28, :lo12:.LANCHOR0 ldrh w0, [x0,820] str w0, [x29,124] ldrb w0, [x28,136] - cbnz w0, .L1501 + cbnz w0, .L1511 ldr w0, [x29,124] mov w22, 1 lsr w27, w0, 2 - b .L1485 -.L1501: + b .L1495 +.L1511: mov w22, 1 mov w27, w22 -.L1485: +.L1495: mov w23, 0 add x28, x21, :lo12:.LANCHOR2 -.L1494: +.L1504: mov w26, 0 mov w20, w26 -.L1486: +.L1496: ldrh w0, [x28,748] cmp w0, w26 - bls .L1521 + bls .L1531 mov w0, 56 ldr x1, [x28,1016] umull x0, w26, w0 @@ -9217,15 +9293,15 @@ FtlLowFormatEraseBlock: uxth w2, w0 str w2, [x29,112] mov w1, w2 - cbz w24, .L1487 + cbz w24, .L1497 str x1, [x29,104] bl IsBlkInVendorPart ldr x1, [x29,104] - cbnz w0, .L1488 -.L1487: + cbnz w0, .L1498 +.L1497: mov w0, w1 bl FtlBbmIsBadBlock - cbnz w0, .L1488 + cbnz w0, .L1498 mov w0, 56 ldr x1, [x28,1016] ldr w2, [x29,112] @@ -9246,12 +9322,12 @@ FtlLowFormatEraseBlock: ldr x2, [x28,1096] add x0, x2, x0, sxtw 2 str x0, [x1,16] -.L1488: +.L1498: add w3, w26, 1 uxth w26, w3 - b .L1486 -.L1521: - cbz w20, .L1498 + b .L1496 +.L1531: + cbz w20, .L1508 ldr x0, [x28,1016] mov w1, w20 mov w2, w22 @@ -9261,15 +9337,15 @@ FtlLowFormatEraseBlock: ldrb w0, [x29,120] mov x1, 0 strb w0, [x28,648] -.L1491: +.L1501: cmp w20, w1, uxth - bls .L1522 + bls .L1532 mov x0, 56 ldr x2, [x28,1016] mul x0, x1, x0 add x3, x2, x0 ldr w0, [x2,x0] - cbz w0, .L1492 + cbz w0, .L1502 ldr w0, [x3,4] add w19, w19, 1 str x1, [x29,112] @@ -9277,47 +9353,47 @@ FtlLowFormatEraseBlock: uxth w19, w19 bl FtlBbmMapBadBlock ldr x1, [x29,112] -.L1492: +.L1502: add x1, x1, 1 - b .L1491 -.L1522: + b .L1501 +.L1532: add w23, w23, w27 ldr w0, [x29,124] uxth w23, w23 cmp w23, w0 - bcc .L1494 + bcc .L1504 mov x23, 0 mov x26, 56 -.L1495: +.L1505: cmp w20, w23, uxth - bls .L1523 - cbz w24, .L1496 + bls .L1533 + cbz w24, .L1506 add x1, x21, :lo12:.LANCHOR2 mul x0, x23, x26 ldr x1, [x1,1016] add x2, x1, x0 ldr w0, [x1,x0] - cbnz w0, .L1496 + cbnz w0, .L1506 ldr w0, [x2,4] mov w1, 1 lsr w0, w0, 10 bl FtlFreeSysBlkQueueIn -.L1496: +.L1506: add x23, x23, 1 - b .L1495 -.L1523: + b .L1505 +.L1533: cmp w25, 63 - bls .L1502 - cbz w24, .L1498 -.L1502: + bls .L1512 + cbz w24, .L1508 +.L1512: add x21, x21, :lo12:.LANCHOR2 mov w1, w22 mov w2, w20 ldr x0, [x21,1016] bl FlashEraseBlocks -.L1498: +.L1508: mov w0, w19 -.L1474: +.L1484: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -9330,21 +9406,23 @@ FtlLowFormatEraseBlock: .global FtlFreeSysBLkSort .type FtlFreeSysBLkSort, %function FtlFreeSysBLkSort: - adrp x0, .LANCHOR2 + adrp x1, .LANCHOR2 + add x0, x1, :lo12:.LANCHOR2 + add x0, x0, 1464 + ldrh w6, [x0,2084] + ldrh w2, [x0,6] + cbz w2, .L1534 mov w5, 0 - add x1, x0, :lo12:.LANCHOR2 + ldrh w3, [x0,2] + ldrh w2, [x0,4] mov w4, w5 - add x1, x1, 1464 - ldrh w6, [x1,2084] and w6, w6, 31 - ldrh w3, [x1,2] - ldrh w2, [x1,4] -.L1525: +.L1536: cmp w4, w6 - bge .L1532 - add x5, x1, x3, sxtw 1 + bge .L1544 + add x5, x0, x3, sxtw 1 ldrh w7, [x5,8] - add x5, x1, x2, sxtw 1 + add x5, x0, x2, sxtw 1 add w4, w4, 1 strh w7, [x5,8] mov w5, 1 @@ -9353,13 +9431,13 @@ FtlFreeSysBLkSort: uxth w4, w4 and w3, w3, 1023 and w2, w2, 1023 - b .L1525 -.L1532: - cbz w5, .L1524 - add x0, x0, :lo12:.LANCHOR2 + b .L1536 +.L1544: + cbz w5, .L1534 + add x0, x1, :lo12:.LANCHOR2 strh w3, [x0,1466] strh w2, [x0,1468] -.L1524: +.L1534: ret .size FtlFreeSysBLkSort, .-FtlFreeSysBLkSort .align 2 @@ -9375,18 +9453,18 @@ remove_from_free_sys_Queue: add x20, x20, :lo12:.LANCHOR2 add x20, x20, 1464 ldrh w3, [x20,6] - cbz w3, .L1534 + cbz w3, .L1546 ldrh w4, [x20,2] mov w19, w0 -.L1535: +.L1547: cmp w19, w3 - bcs .L1540 + bcs .L1552 add w2, w19, w4 ubfiz x2, x2, 1, 10 add x2, x20, x2 ldrh w0, [x2,8] cmp w0, w1 - bne .L1536 + bne .L1548 adrp x0, .LC34 add x0, x0, :lo12:.LC34 bl printk @@ -9404,13 +9482,13 @@ remove_from_free_sys_Queue: strh w1, [x19,8] strh w0, [x20,6] mov w0, 1 - b .L1534 -.L1536: + b .L1546 +.L1548: add w19, w19, 1 - b .L1535 -.L1540: + b .L1547 +.L1552: mov w0, 0 -.L1534: +.L1546: ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 ret @@ -9431,10 +9509,10 @@ FtlFreeSysBlkQueueOut: add x21, x19, 1464 adrp x24, .LANCHOR0 add x23, x23, :lo12:.LC36 -.L1542: +.L1554: ldrh w1, [x21,6] adrp x22, .LANCHOR2 - cbz w1, .L1543 + cbz w1, .L1555 ldrh w2, [x21,2] sub w1, w1, #1 add x0, x21, x2, sxtw 1 @@ -9444,7 +9522,7 @@ FtlFreeSysBlkQueueOut: and w2, w2, 1023 strh w2, [x21,2] ldrh w20, [x0,8] - cbnz w1, .L1544 + cbnz w1, .L1556 mov w0, w20 str x1, [x29,88] bl P2V_block_in_plane @@ -9455,11 +9533,11 @@ FtlFreeSysBlkQueueOut: str w2, [x0,4] add x0, x24, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L1545 + cbz w0, .L1557 ldr x0, [x19,1016] mov w2, 1 bl FlashEraseBlocks -.L1545: +.L1557: add x25, x22, :lo12:.LANCHOR2 mov w1, 1 mov w2, w1 @@ -9473,22 +9551,25 @@ FtlFreeSysBlkQueueOut: ldr w0, [x25,912] add w0, w0, 1 str w0, [x25,912] - b .L1544 -.L1543: + b .L1556 +.L1555: adrp x0, .LC35 add x0, x0, :lo12:.LC35 bl printk -.L1546: - b .L1546 -.L1544: - cbnz w20, .L1547 +.L1558: + b .L1558 +.L1556: + sub w0, w20, #1 + mov w1, 65533 + cmp w1, w0, uxth + bcs .L1559 add x22, x22, :lo12:.LANCHOR2 mov x0, x23 mov w1, w20 ldrh w2, [x22,1470] bl printk - b .L1542 -.L1547: + b .L1554 +.L1559: mov w0, w20 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -9507,7 +9588,7 @@ insert_data_list: mov x4, x2 ldrh w1, [x3,756] cmp w1, w0 - bls .L1553 + bls .L1565 mov w7, 6 ldr x11, [x3,1280] mov w1, -1 @@ -9516,10 +9597,10 @@ insert_data_list: strh w1, [x5,2] strh w1, [x11,x10] ldr x1, [x3,3568] - cbnz x1, .L1554 + cbnz x1, .L1566 str x5, [x3,3568] - b .L1553 -.L1554: + b .L1565 +.L1566: ubfiz x8, x0, 1, 16 ldr x13, [x3,1184] ldrh w2, [x5,4] @@ -9539,13 +9620,13 @@ insert_data_list: add x9, x14, x8 mov w8, w7 uxth w2, w2 -.L1562: +.L1574: add w3, w3, 1 cmp w0, w2 uxth w3, w3 - beq .L1553 + beq .L1565 cmp w3, w17 - bhi .L1553 + bhi .L1565 ubfiz x15, x2, 1, 16 ldrh w16, [x1,4] cmp w16, wzr @@ -9553,47 +9634,47 @@ insert_data_list: mul w7, w7, w16 csinv w7, w7, wzr, ne cmp w7, w6 - bne .L1558 + bne .L1570 ldrh w15, [x14,x15] ldrh w7, [x9] cmp w15, w7 - bcc .L1560 - b .L1559 -.L1558: - bhi .L1559 -.L1560: + bcc .L1572 + b .L1571 +.L1570: + bhi .L1571 +.L1572: ldrh w7, [x1] cmp w7, w18 - bne .L1561 + bne .L1573 strh w2, [x5,2] add x2, x4, :lo12:.LANCHOR2 strh w0, [x1] str x5, [x2,3576] - b .L1553 -.L1561: + b .L1565 +.L1573: umull x1, w7, w8 mov w2, w7 add x1, x12, x1 - b .L1562 -.L1559: + b .L1574 +.L1571: strh w2, [x11,x10] ldrh w2, [x1,2] strh w2, [x5,2] add x2, x4, :lo12:.LANCHOR2 ldr x3, [x2,3568] cmp x1, x3 - bne .L1563 + bne .L1575 strh w0, [x1,2] str x5, [x2,3568] - b .L1553 -.L1563: + b .L1565 +.L1575: ldrh w3, [x1,2] mov w4, 6 ldr x2, [x2,1280] umull x3, w3, w4 strh w0, [x2,x3] strh w0, [x1,2] -.L1553: +.L1565: mov w0, 0 ret .size insert_data_list, .-insert_data_list @@ -9619,7 +9700,7 @@ insert_free_list: uxth w0, w0 mov w7, 65535 cmp w0, w7 - beq .L1568 + beq .L1580 adrp x2, .LANCHOR2 mov w6, 6 add x5, x2, :lo12:.LANCHOR2 @@ -9631,10 +9712,10 @@ insert_free_list: strh w1, [x4,2] strh w1, [x9,x8] ldr x1, [x5,3592] - cbnz x1, .L1569 + cbnz x1, .L1581 str x4, [x5,3592] - b .L1568 -.L1569: + b .L1580 +.L1581: ldr x11, [x5,1168] ubfiz x2, x0, 1, 16 ldr x10, [x5,1280] @@ -9644,41 +9725,41 @@ insert_free_list: asr x2, x2, 1 madd x2, x5, x2, x2 uxth w2, w2 -.L1572: +.L1584: ubfiz x5, x2, 1, 16 ldrh w5, [x11,x5] cmp w5, w12 - bcs .L1570 + bcs .L1582 ldrh w5, [x1] cmp w5, w7 - bne .L1571 + bne .L1583 strh w2, [x4,2] strh w0, [x1] - b .L1568 -.L1571: + b .L1580 +.L1583: umull x1, w5, w6 mov w2, w5 add x1, x10, x1 - b .L1572 -.L1570: + b .L1584 +.L1582: ldrh w5, [x1,2] strh w5, [x4,2] strh w2, [x9,x8] add x2, x3, :lo12:.LANCHOR2 ldr x3, [x2,3592] cmp x1, x3 - bne .L1573 + bne .L1585 strh w0, [x1,2] str x4, [x2,3592] - b .L1568 -.L1573: + b .L1580 +.L1585: ldrh w3, [x1,2] mov w4, 6 ldr x2, [x2,1280] umull x3, w3, w4 strh w0, [x2,x3] strh w0, [x1,2] -.L1568: +.L1580: mov w0, 0 ret .size insert_free_list, .-insert_free_list @@ -9711,31 +9792,31 @@ List_remove_node: ldr x2, [x6,1280] add x4, x2, x1 cmp x4, x3 - bne .L1576 + bne .L1588 ldrh w3, [x2,x1] cmp w3, w7 - bne .L1577 + bne .L1589 str xzr, [x0] - b .L1578 -.L1577: + b .L1590 +.L1589: umull x3, w3, w5 add x3, x2, x3 str x3, [x0] mov w0, -1 strh w0, [x3,2] - b .L1578 -.L1576: + b .L1590 +.L1588: ldrh w0, [x2,x1] ldrh w3, [x4,2] cmp w0, w7 - bne .L1579 + bne .L1591 cmp w3, w0 - beq .L1578 + beq .L1590 umull x3, w3, w5 mov w0, -1 strh w0, [x2,x3] - b .L1578 -.L1579: + b .L1590 +.L1591: umull x0, w0, w5 add x0, x2, x0 strh w3, [x0,2] @@ -9744,7 +9825,7 @@ List_remove_node: ldrh w7, [x2,x1] umull x3, w3, w5 strh w7, [x0,x3] -.L1578: +.L1590: mov w0, -1 strh w0, [x2,x1] strh w0, [x4,2] @@ -9761,14 +9842,14 @@ List_pop_index_node: str x19, [sp,16] mov w19, 65535 ldr x2, [x0] - cbz x2, .L1581 + cbz x2, .L1593 adrp x3, .LANCHOR2+1280 mov w5, w19 mov w6, 6 ldr x4, [x3,#:lo12:.LANCHOR2+1280] -.L1582: - cbnz w1, .L1583 -.L1585: +.L1594: + cbnz w1, .L1595 +.L1597: sub x2, x2, x4 mov x1, -6148914691236517206 asr x2, x2, 1 @@ -9776,17 +9857,17 @@ List_pop_index_node: uxth w19, w2 mov w1, w19 bl List_remove_node - b .L1581 -.L1583: + b .L1593 +.L1595: ldrh w3, [x2] cmp w3, w5 - beq .L1585 + beq .L1597 umull x3, w3, w6 sub w1, w1, #1 add x2, x4, x3 uxth w1, w1 - b .L1582 -.L1581: + b .L1594 +.L1593: mov w0, w19 ldr x19, [sp,16] ldp x29, x30, [sp], 32 @@ -9801,26 +9882,26 @@ List_get_gc_head_node: add x2, x2, :lo12:.LANCHOR2 mov w0, 65535 ldr x1, [x2,3568] - cbz x1, .L1593 + cbz x1, .L1605 ldr x4, [x2,1280] mov w5, 6 -.L1589: - cbz w3, .L1590 +.L1601: + cbz w3, .L1602 ldrh w2, [x1] cmp w2, w0 - beq .L1593 + beq .L1605 umull x2, w2, w5 sub w3, w3, #1 add x1, x4, x2 uxth w3, w3 - b .L1589 -.L1590: + b .L1601 +.L1602: sub x1, x1, x4 mov x0, -6148914691236517206 asr x1, x1, 1 madd x1, x0, x1, x1 uxth w0, w1 -.L1593: +.L1605: ret .size List_get_gc_head_node, .-List_get_gc_head_node .align 2 @@ -9835,20 +9916,20 @@ List_update_data_list: add x0, x19, :lo12:.LANCHOR2 ldrh w1, [x0,3608] cmp w1, w20 - beq .L1595 + beq .L1607 ldrh w1, [x0,3656] cmp w1, w20 - beq .L1595 + beq .L1607 ldrh w1, [x0,3704] cmp w1, w20 - beq .L1595 + beq .L1607 mov w3, 6 ldr x4, [x0,1280] ldr x2, [x0,3568] umull x3, w20, w3 add x1, x4, x3 cmp x1, x2 - beq .L1595 + beq .L1607 ldr x5, [x0,1184] ubfiz x0, x20, 1, 16 ldrh w2, [x5,x0] @@ -9859,11 +9940,11 @@ List_update_data_list: mov w0, 65535 csinv w2, w2, wzr, ne cmp w1, w0 - bne .L1597 + bne .L1609 ldrh w0, [x4,x3] cmp w0, w1 - beq .L1595 -.L1597: + beq .L1607 +.L1609: mov w0, 6 mov x3, -6148914691236517206 umull x1, w1, w0 @@ -9876,7 +9957,7 @@ List_update_data_list: mul w0, w0, w1 csinv w0, w0, wzr, ne cmp w2, w0 - bcs .L1595 + bcs .L1607 add x19, x19, :lo12:.LANCHOR2 mov w1, w20 add x0, x19, 3568 @@ -9886,7 +9967,7 @@ List_update_data_list: strh w0, [x19,3584] mov w0, w20 bl INSERT_DATA_LIST -.L1595: +.L1607: mov w0, 0 ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 @@ -9913,74 +9994,74 @@ ftl_free_no_use_map_blk: mov x0, x21 bl ftl_memset mov w0, 0 -.L1602: +.L1614: ldrh w1, [x19,6] cmp w1, w0 - bls .L1615 + bls .L1627 ubfiz x1, x0, 2, 16 ldr w2, [x20,x1] mov w1, 0 ubfx x2, x2, 10, 16 -.L1603: +.L1615: ldrh w3, [x19,10] cmp w3, w1 - bls .L1616 + bls .L1628 ubfiz x3, x1, 1, 16 ldrh w4, [x25,x3] cmp w4, w2 - bne .L1604 + bne .L1616 ldrh w4, [x21,x3] add w4, w4, 1 strh w4, [x21,x3] -.L1604: +.L1616: add w1, w1, 1 uxth w1, w1 - b .L1603 -.L1616: + b .L1615 +.L1628: add w0, w0, 1 uxth w0, w0 - b .L1602 -.L1615: + b .L1614 +.L1627: mov w24, 0 ldrh w26, [x21] mov w20, w24 adrp x27, .LANCHOR2 -.L1607: +.L1619: ldrh w0, [x19,10] cmp w0, w20 - bls .L1617 + bls .L1629 ldrh w0, [x19] uxtw x22, w20 cmp w0, w20 - bne .L1608 + bne .L1620 add x0, x27, :lo12:.LANCHOR2 ldrh w1, [x19,2] ldrh w0, [x0,820] cmp w1, w0 - bcs .L1608 + bcs .L1620 strh w0, [x21,x22,lsl 1] -.L1608: +.L1620: lsl x22, x22, 1 ldrh w23, [x21,x22] cmp w26, w23 - bls .L1609 + bls .L1621 mov w24, w20 mov w26, w23 -.L1609: - cbnz w23, .L1610 +.L1621: + cbnz w23, .L1622 ldrh w0, [x25,x22] - cbz w0, .L1610 + cbz w0, .L1622 mov w1, 1 bl FtlFreeSysBlkQueueIn strh w23, [x25,x22] ldrh w0, [x19,8] sub w0, w0, #1 strh w0, [x19,8] -.L1610: +.L1622: add w20, w20, 1 uxth w20, w20 - b .L1607 -.L1617: + b .L1619 +.L1629: mov w0, w24 ldr x27, [sp,80] ldp x19, x20, [sp,16] @@ -10001,12 +10082,12 @@ ftl_map_blk_alloc_new_blk: mov w20, 0 ldrh w2, [x0,10] ldr x1, [x0,16] -.L1619: +.L1631: cmp w20, w2 - beq .L1623 + beq .L1635 mov x22, x1 ldrh w21, [x1],2 - cbnz w21, .L1620 + cbnz w21, .L1632 mov x19, x0 bl FtlFreeSysBlkQueueOut strh w0, [x22] @@ -10014,15 +10095,15 @@ ftl_map_blk_alloc_new_blk: sub w2, w1, #1 mov w0, 65533 cmp w0, w2, uxth - bcs .L1621 + bcs .L1633 adrp x2, .LANCHOR2+1470 adrp x0, .LC37 add x0, x0, :lo12:.LC37 ldrh w2, [x2,#:lo12:.LANCHOR2+1470] bl printk -.L1622: - b .L1622 -.L1621: +.L1634: + b .L1634 +.L1633: ldr w0, [x19,48] strh w21, [x19,2] add w0, w0, 1 @@ -10031,12 +10112,12 @@ ftl_map_blk_alloc_new_blk: strh w20, [x19] add w0, w0, 1 strh w0, [x19,8] - b .L1623 -.L1620: + b .L1635 +.L1632: add w20, w20, 1 uxth w20, w20 - b .L1619 -.L1623: + b .L1631 +.L1635: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -10047,127 +10128,130 @@ ftl_map_blk_alloc_new_blk: .global FtlMapWritePage .type FtlMapWritePage, %function FtlMapWritePage: - stp x29, x30, [sp, -96]! + stp x29, x30, [sp, -112]! add x29, sp, 0 - stp x19, x20, [sp,16] - adrp x20, .LANCHOR2 - mov x19, x0 - stp x21, x22, [sp,32] - add x22, x20, :lo12:.LANCHOR2 - stp x23, x24, [sp,48] stp x25, x26, [sp,64] - ldr w21, [x22,1400] - mov w24, w1 + adrp x25, .LANCHOR2 + mov x26, x2 + stp x23, x24, [sp,48] stp x27, x28, [sp,80] - mov x25, x2 - cbnz w21, .L1626 adrp x23, .LC38 - mov w26, 65535 - add x28, x22, 1408 - add x23, x23, :lo12:.LC38 -.L1627: - ldr w1, [x22,896] + add x28, x25, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + mov w24, w1 + mov x19, x0 + mov w22, 0 + add x0, x23, :lo12:.LC38 + mov w27, 65535 + add x21, x28, 1408 + str x0, [x29,104] +.L1638: + add x0, x25, :lo12:.LANCHOR2 + adrp x20, .LANCHOR2 + ldr w1, [x0,896] add w1, w1, 1 - str w1, [x22,896] - ldrh w1, [x22,820] - ldrh w0, [x19,2] - sub w1, w1, #1 - cmp w0, w1 - bge .L1628 + str w1, [x0,896] + ldrh w0, [x0,820] + ldrh w1, [x19,2] + sub w0, w0, #1 + cmp w1, w0 + bge .L1639 ldrh w0, [x19] - cmp w0, w26 - bne .L1629 -.L1628: + cmp w0, w27 + bne .L1640 +.L1639: mov x0, x19 bl Ftl_write_map_blk_to_last_page -.L1629: - ldrh w1, [x19] - mov w2, 16 +.L1640: + ldr w1, [x28,1400] + cbnz w1, .L1641 + ldrh w2, [x19] ldr x0, [x19,16] - ldrh w27, [x0,x1,lsl 1] - ldrh w1, [x19,2] - ldr x0, [x22,1112] - orr w1, w1, w27, lsl 10 - str w1, [x28,4] - mov w1, 0 - str x25, [x28,8] - str x0, [x28,16] + ldrh w23, [x0,x2,lsl 1] + mov w2, 16 + ldrh w0, [x19,2] + str x26, [x21,8] + orr w0, w0, w23, lsl 10 + str w0, [x21,4] + ldr x0, [x28,1112] + str x0, [x21,16] bl ftl_memset - ldr x1, [x28,16] - ldr w0, [x19,48] - str w0, [x1,4] - strh w24, [x1,8] - ldrh w0, [x19,4] - strh w0, [x1] - mov x0, x28 - strh w27, [x1,2] + ldr x0, [x21,16] + ldr w1, [x19,48] + str w1, [x0,4] + strh w24, [x0,8] + ldrh w1, [x19,4] + strh w1, [x0] mov w1, 1 + strh w23, [x0,2] mov w3, w1 + mov x0, x21 mov w2, w1 bl FlashProgPages ldrh w3, [x19,2] add w3, w3, 1 uxth w3, w3 strh w3, [x19,2] - ldr w1, [x28] - cmn w1, #1 - bne .L1630 - ldr w1, [x28,4] - mov x0, x23 - add w21, w21, 1 + ldr w0, [x21] + cmn w0, #1 + bne .L1642 + ldr x0, [x29,104] + add w22, w22, 1 + ldr w1, [x21,4] + uxth w22, w22 bl printk - uxth w21, w21 ldrh w0, [x19,2] cmp w0, 2 - bhi .L1631 - ldrh w1, [x22,820] - sub w1, w1, #1 - strh w1, [x19,2] -.L1631: - cmp w21, 3 - bls .L1627 + bhi .L1643 + ldrh w0, [x28,820] + sub w0, w0, #1 + strh w0, [x19,2] +.L1643: + cmp w22, 3 + bls .L1638 add x20, x20, :lo12:.LANCHOR2 adrp x0, .LC39 add x0, x0, :lo12:.LC39 - mov w2, w21 + mov w2, w22 ldr w1, [x20,1412] bl printk mov w0, 1 str w0, [x20,1400] - b .L1626 -.L1630: - cbz w1, .L1633 - strh w27, [x19,60] -.L1633: + b .L1641 +.L1642: + cbz w0, .L1645 + strh w23, [x19,60] +.L1645: cmp w3, 1 - beq .L1627 - cmp w1, 256 - beq .L1627 + beq .L1638 + cmp w0, 256 + beq .L1638 add x20, x20, :lo12:.LANCHOR2 ldr x0, [x19,40] ldr w1, [x20,1412] str w1, [x0,w24,uxtw 2] -.L1626: +.L1641: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] ldp x25, x26, [sp,64] ldp x27, x28, [sp,80] - ldp x29, x30, [sp], 96 + ldp x29, x30, [sp], 112 ret .size FtlMapWritePage, .-FtlMapWritePage .align 2 .global ftl_map_blk_gc .type ftl_map_blk_gc, %function ftl_map_blk_gc: - stp x29, x30, [sp, -112]! + stp x29, x30, [sp, -96]! add x29, sp, 0 stp x19, x20, [sp,16] stp x21, x22, [sp,32] stp x23, x24, [sp,48] stp x25, x26, [sp,64] - stp x27, x28, [sp,80] + str x27, [sp,80] mov x19, x0 adrp x20, .LANCHOR2 ldr x22, [x0,16] @@ -10177,39 +10261,39 @@ ftl_map_blk_gc: ldrh w2, [x19,8] sub w1, w4, #4 cmp w2, w1 - bge .L1638 + bge .L1650 ldrh w2, [x19,60] mov w1, 65535 cmp w2, w1 - beq .L1640 + beq .L1652 add x1, x20, :lo12:.LANCHOR2 ldrh w2, [x19,2] ldrh w1, [x1,820] cmp w2, w1 - bcc .L1640 -.L1638: + bcc .L1652 +.L1650: ldrh w1, [x19,60] uxth w21, w0 mov w0, 65535 cmp w1, w0 - beq .L1642 + beq .L1654 add x0, x20, :lo12:.LANCHOR2 ldrh w3, [x19,2] ldrh w0, [x0,820] cmp w0, w3 - bhi .L1642 + bhi .L1654 mov x2, 0 -.L1643: +.L1655: uxth w0, w2 cmp w0, w4 - bcs .L1644 + bcs .L1656 add x2, x2, 1 add x5, x22, x2, lsl 1 ldrh w5, [x5,-2] cmp w5, w1 - bne .L1643 + bne .L1655 mov w21, w0 -.L1644: +.L1656: ubfiz x2, x0, 1, 16 adrp x0, .LC40 add x0, x0, :lo12:.LC40 @@ -10217,12 +10301,12 @@ ftl_map_blk_gc: bl printk mov w0, -1 strh w0, [x19,60] -.L1642: +.L1654: ubfiz x21, x21, 1, 16 - ldrh w25, [x22,x21] - cbz w25, .L1640 + ldrh w24, [x22,x21] + cbz w24, .L1652 ldr w0, [x19,52] - cbnz w0, .L1640 + cbnz w0, .L1652 mov w1, 1 str w1, [x19,52] strh w0, [x22,x21] @@ -10233,76 +10317,79 @@ ftl_map_blk_gc: add x0, x20, :lo12:.LANCHOR2 ldrh w0, [x0,820] cmp w1, w0 - bcc .L1646 + bcc .L1658 mov x0, x19 bl ftl_map_blk_alloc_new_blk -.L1646: - add x24, x20, :lo12:.LANCHOR2 - adrp x26, .LC41 +.L1658: + add x25, x20, :lo12:.LANCHOR2 mov w21, 0 - add x22, x24, 1408 - mov w27, 1 - add x26, x26, :lo12:.LC41 -.L1647: + add x22, x25, 1408 +.L1659: ldrh w0, [x19,6] cmp w0, w21 - bls .L1657 - ubfiz x28, x21, 2, 16 - ldr w0, [x23,x28] - cmp w25, w0, lsr 10 - bne .L1648 - ldr x3, [x24,1112] + bls .L1670 + ubfiz x0, x21, 2, 16 + add x27, x23, x0 + ldr w1, [x23,x0] + cmp w24, w1, lsr 10 + bne .L1660 + ldr x1, [x25,1056] + ldr x26, [x25,1112] + str x1, [x22,8] mov w1, 1 - ldr x0, [x24,1056] + str x26, [x22,16] mov w2, w1 - str x3, [x22,16] - str x0, [x22,8] - str x3, [x29,104] - ldr w0, [x23,x28] + ldr w0, [x23,x0] str w0, [x22,4] mov x0, x22 bl FlashReadPages ldr w0, [x22] - ldr x3, [x29,104] cmn w0, #1 - bne .L1649 - str wzr, [x23,x28] - mov x0, x26 - ldr w1, [x22,4] - ldrh w2, [x3,8] + bne .L1661 +.L1663: + add x20, x20, :lo12:.LANCHOR2 + str wzr, [x27] + adrp x0, .LC41 + ldrh w2, [x26,8] + add x0, x0, :lo12:.LC41 + ldr w1, [x20,1412] bl printk - str w27, [x24,1400] - b .L1648 -.L1649: + mov w0, 1 + str w0, [x20,1400] + b .L1662 +.L1661: + ldrh w0, [x26,8] + cmp w0, w21 + bne .L1663 ldr x2, [x22,8] mov x0, x19 mov w1, w21 bl FtlMapWritePage -.L1648: +.L1660: add w21, w21, 1 uxth w21, w21 - b .L1647 -.L1657: - mov w0, w25 + b .L1659 +.L1670: + mov w0, w24 mov w1, 1 bl FtlFreeSysBlkQueueIn str wzr, [x19,52] -.L1640: +.L1652: add x20, x20, :lo12:.LANCHOR2 ldrh w1, [x19,2] ldrh w0, [x20,820] cmp w1, w0 - bcc .L1651 + bcc .L1662 mov x0, x19 bl ftl_map_blk_alloc_new_blk -.L1651: +.L1662: mov w0, 0 + ldr x27, [sp,80] ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] ldp x25, x26, [sp,64] - ldp x27, x28, [sp,80] - ldp x29, x30, [sp], 112 + ldp x29, x30, [sp], 96 ret .size ftl_map_blk_gc, .-ftl_map_blk_gc .align 2 @@ -10319,12 +10406,12 @@ Ftl_write_map_blk_to_last_page: ldr w20, [x1,1400] ldr x22, [x0,16] ldr x23, [x0,40] - cbnz w20, .L1659 + cbnz w20, .L1672 mov x19, x0 ldrh w0, [x0] mov w2, 65535 cmp w0, w2 - bne .L1660 + bne .L1673 ldrh w0, [x19,8] add w0, w0, 1 strh w0, [x19,8] @@ -10335,8 +10422,8 @@ Ftl_write_map_blk_to_last_page: strh w20, [x19] add w0, w0, 1 str w0, [x19,48] - b .L1659 -.L1660: + b .L1672 +.L1673: ubfiz x0, x0, 1, 16 ldr w2, [x19,48] ldrh w22, [x22,x0] @@ -10359,14 +10446,14 @@ Ftl_write_map_blk_to_last_page: lsl w2, w2, 3 bl ftl_memset mov w0, w20 -.L1661: +.L1674: ldrh w1, [x19,6] cmp w1, w0 - bls .L1664 + bls .L1677 ubfiz x3, x0, 2, 32 ldr w1, [x23,x3] cmp w22, w1, lsr 10 - bne .L1662 + bne .L1675 add x2, x21, :lo12:.LANCHOR2 add w20, w20, 1 uxth w20, w20 @@ -10377,11 +10464,11 @@ Ftl_write_map_blk_to_last_page: ldr w3, [x23,x3] add x1, x2, x1 str w3, [x1,4] -.L1662: +.L1675: add w0, w0, 1 uxth w0, w0 - b .L1661 -.L1664: + b .L1674 +.L1677: mov w1, 1 add x0, x21, :lo12:.LANCHOR2 add x0, x0, 1408 @@ -10393,7 +10480,7 @@ Ftl_write_map_blk_to_last_page: strh w0, [x19,2] mov x0, x19 bl ftl_map_blk_gc -.L1659: +.L1672: mov w0, 0 ldr x23, [sp,48] ldp x19, x20, [sp,16] @@ -10438,209 +10525,241 @@ select_l2p_ram_region: mov w5, 65535 ldrh w2, [x1,858] ldr x1, [x1,1264] -.L1667: +.L1680: uxth w0, w4 cmp w0, w2 - bcs .L1683 + bcs .L1696 add x4, x4, 1 add x6, x1, x4, lsl 4 ldrh w6, [x6,-16] cmp w6, w5 - bne .L1667 - b .L1668 -.L1683: + bne .L1680 + b .L1681 +.L1696: mov w0, w2 mov x4, 0 mov w7, -2147483648 -.L1670: +.L1683: uxth w6, w4 cmp w6, w2 - bcs .L1684 + bcs .L1697 add x5, x1, x4, lsl 4 ldr w5, [x5,4] - tbnz w5, #31, .L1679 + tbnz w5, #31, .L1692 cmp w5, w7 - bcc .L1671 -.L1679: + bcc .L1684 +.L1692: mov w5, w7 mov w6, w0 -.L1671: +.L1684: add x4, x4, 1 mov w7, w5 mov w0, w6 - b .L1670 -.L1684: + b .L1683 +.L1697: cmp w0, w2 - bcc .L1668 + bcc .L1681 add x0, x3, :lo12:.LANCHOR2 add x1, x1, 4 mov w4, -1 mov w3, 0 ldrh w5, [x0,3816] mov w0, w2 -.L1674: +.L1687: cmp w3, w2 - beq .L1668 + beq .L1681 ldr w7, [x1] cmp w7, w4 - bcs .L1675 + bcs .L1688 ldrh w6, [x1,-4] cmp w6, w5 csel w4, w4, w7, eq cmp w6, w5 csel w0, w0, w3, eq -.L1675: +.L1688: add w3, w3, 1 add x1, x1, 16 uxth w3, w3 - b .L1674 -.L1668: + b .L1687 +.L1681: ret .size select_l2p_ram_region, .-select_l2p_ram_region .align 2 .global log2phys .type log2phys, %function log2phys: - stp x29, x30, [sp, -96]! + stp x29, x30, [sp, -112]! add x29, sp, 0 - stp x21, x22, [sp,32] - adrp x21, .LANCHOR2 - add x3, x21, :lo12:.LANCHOR2 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x3, x19, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] stp x25, x26, [sp,64] stp x27, x28, [sp,80] - stp x23, x24, [sp,48] - stp x19, x20, [sp,16] - mov x26, x1 - mov w27, w2 + stp x21, x22, [sp,32] + mov x25, x1 + mov w26, w2 ldrh w1, [x3,826] mov x2, 1 - ldr x20, [x3,1264] + ldr x21, [x3,1264] add w1, w1, 7 lsr w28, w0, w1 lsl x1, x2, x1 sub w1, w1, #1 and w23, w1, w0 ldrh w1, [x3,858] - uxth w25, w28 + uxth w24, w28 mov x0, 0 uxth x23, w23 -.L1686: - uxth x19, w0 - cmp w19, w1 - bcs .L1700 +.L1699: + uxth x20, w0 + cmp w20, w1 + bcs .L1714 add x0, x0, 1 - add x2, x20, x0, lsl 4 + add x2, x21, x0, lsl 4 ldrh w2, [x2,-16] - cmp w2, w25 - bne .L1686 -.L1687: - cbnz w27, .L1688 - add x0, x21, :lo12:.LANCHOR2 + cmp w2, w24 + bne .L1699 +.L1700: + cbnz w26, .L1701 + add x0, x19, :lo12:.LANCHOR2 ldr x1, [x0,1264] - add x1, x1, x19, lsl 4 + add x1, x1, x20, lsl 4 ldr x0, [x1,8] ldr w0, [x0,x23,lsl 2] - str w0, [x26] - b .L1689 -.L1688: - add x1, x21, :lo12:.LANCHOR2 - lsl x0, x19, 4 - ldr w3, [x26] + str w0, [x25] + b .L1702 +.L1701: + add x1, x19, :lo12:.LANCHOR2 + lsl x0, x20, 4 + ldr w3, [x25] ldr x2, [x1,1264] add x2, x2, x0 ldr x2, [x2,8] str w3, [x2,x23,lsl 2] - strh w25, [x1,3816] + strh w24, [x1,3816] ldr x2, [x1,1264] add x0, x2, x0 ldr w2, [x0,4] orr w2, w2, -2147483648 str w2, [x0,4] -.L1689: - add x21, x21, :lo12:.LANCHOR2 - ldr x0, [x21,1264] - add x19, x0, x19, lsl 4 - ldr w0, [x19,4] +.L1702: + add x19, x19, :lo12:.LANCHOR2 + ldr x0, [x19,1264] + add x20, x0, x20, lsl 4 + ldr w0, [x20,4] cmn w0, #1 - beq .L1697 + beq .L1711 add w0, w0, 1 - str w0, [x19,4] - b .L1697 -.L1700: + str w0, [x20,4] + b .L1711 +.L1714: bl select_l2p_ram_region - uxth x19, w0 - ubfiz x22, x19, 4, 16 + uxth x20, w0 + ubfiz x22, x20, 4, 16 mov w2, 65535 - add x1, x20, x22 - ldrh w3, [x20,x22] + add x1, x21, x22 + ldrh w3, [x21,x22] cmp w3, w2 - beq .L1692 + beq .L1705 ldr w1, [x1,4] - tbz w1, #31, .L1692 + tbz w1, #31, .L1705 bl flush_l2p_region -.L1692: - add x20, x21, :lo12:.LANCHOR2 - ubfiz x0, x25, 2, 16 - ldr x1, [x20,1240] - ldr w24, [x1,x0] - cbnz w24, .L1693 - ldr x0, [x20,1264] +.L1705: + add x21, x19, :lo12:.LANCHOR2 + ubfiz x0, x24, 2, 16 + ldr x1, [x21,1240] + ldr w27, [x1,x0] + cbnz w27, .L1706 + ldr x0, [x21,1264] mov w1, 255 - ldrh w2, [x20,828] + ldrh w2, [x21,828] add x0, x0, x22 ldr x0, [x0,8] bl ftl_memset - ldr x0, [x20,1264] - strh w25, [x0,x22] - ldr x0, [x20,1264] + ldr x0, [x21,1264] + strh w24, [x0,x22] + ldr x0, [x21,1264] add x22, x0, x22 - str w24, [x22,4] - b .L1687 -.L1693: - ldr x1, [x20,1264] - add x0, x20, 1408 - str w24, [x0,4] - add x1, x1, x22 - ldr x1, [x1,8] - str x1, [x0,8] - ldr x1, [x20,1112] - str x1, [x0,16] + str w27, [x22,4] + b .L1700 +.L1706: + ldr x0, [x21,1264] + add x3, x21, 1408 mov w1, 1 + str x3, [x29,104] + add x0, x0, x22 mov w2, w1 + str w27, [x21,1412] + ldr x0, [x0,8] + str x0, [x21,1416] + ldr x0, [x21,1112] + str x0, [x21,1424] + mov x0, x3 bl FlashReadPages - ldr w0, [x20,1408] + ldr w0, [x21,1408] + ldr x3, [x29,104] cmp w0, 256 - bne .L1694 - and w28, w28, 65535 + ldr x4, [x3,16] + bne .L1707 + and w3, w28, 65535 adrp x0, .LC42 - mov w2, w24 - mov w1, w28 + mov w1, w3 + mov w2, w27 add x0, x0, :lo12:.LC42 - lsr w24, w24, 10 + str x4, [x29,96] + str x3, [x29,104] bl printk - strh w24, [x20,3812] - add x0, x20, 3752 - ldr x2, [x20,1264] - mov w1, w28 + add x0, x21, 3752 + ldr x2, [x21,1264] + lsr w1, w27, 10 + ldr x3, [x29,104] add x2, x2, x22 + strh w1, [x0,60] + mov w1, w3 ldr x2, [x2,8] bl FtlMapWritePage -.L1694: - add x1, x21, :lo12:.LANCHOR2 + ldr x4, [x29,96] +.L1707: + ldrh w0, [x4,8] + cmp w0, w24 + beq .L1708 + adrp x0, .LC43 + add x21, x19, :lo12:.LANCHOR2 + uxth w1, w28 + mov w2, w27 + add x0, x0, :lo12:.LC43 + bl printk + mov w2, 4 + ldr x1, [x21,1424] + adrp x0, .LC17 + mov w3, w2 + add x0, x0, :lo12:.LC17 + bl rknand_print_hex + adrp x0, .LC44 + ldr x1, [x21,1240] + ldrh w3, [x21,856] + add x0, x0, :lo12:.LC44 + mov w2, 4 + bl rknand_print_hex + mov w0, 1 + str w0, [x21,1400] +.L1708: + add x1, x19, :lo12:.LANCHOR2 ldr x0, [x1,1264] add x0, x0, x22 str wzr, [x0,4] ldr x0, [x1,1264] - strh w25, [x0,x22] - b .L1687 -.L1697: + strh w24, [x0,x22] + b .L1700 +.L1711: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] ldp x25, x26, [sp,64] ldp x27, x28, [sp,80] - ldp x29, x30, [sp], 96 + ldp x29, x30, [sp], 112 ret .size log2phys, .-log2phys .align 2 @@ -10664,12 +10783,12 @@ FtlVendorPartWrite: mov x24, x2 ldrh w23, [x19,826] mov w21, -1 - bhi .L1702 + bhi .L1716 lsr w23, w25, w23 mov w21, 0 add x27, x19, 3824 -.L1703: - cbz w22, .L1702 +.L1717: + cbz w22, .L1716 ldrh w1, [x19,824] ldr x0, [x19,1232] udiv w26, w25, w1 @@ -10681,8 +10800,8 @@ FtlVendorPartWrite: cmp w20, w22 csel w20, w0, w20, hi cmp w20, w1 - beq .L1705 - cbz w2, .L1705 + beq .L1719 + cbz w2, .L1719 ldr x0, [x19,1064] mov w1, 1 str w2, [x29,108] @@ -10691,13 +10810,13 @@ FtlVendorPartWrite: add x0, x29, 104 str xzr, [x29,120] bl FlashReadPages - b .L1706 -.L1705: + b .L1720 +.L1719: ldr x0, [x19,1064] mov w1, 0 ldrh w2, [x19,828] bl ftl_memset -.L1706: +.L1720: ldr x0, [x19,1064] lsl w28, w20, 9 ubfiz x26, x26, 9, 16 @@ -10715,8 +10834,8 @@ FtlVendorPartWrite: bl FtlMapWritePage cmn w0, #1 csinv w21, w21, wzr, ne - b .L1703 -.L1702: + b .L1717 +.L1716: mov w0, w21 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -10747,16 +10866,16 @@ FtlVendorPartRead: ldrh w20, [x3,826] cmp w2, w1 mov w0, -1 - bhi .L1717 - adrp x26, .LC43 + bhi .L1731 + adrp x26, .LC45 add x0, x3, 3824 lsr w20, w23, w20 mov w21, 0 mov x28, x3 - add x26, x26, :lo12:.LC43 + add x26, x26, :lo12:.LC45 str x0, [x29,104] -.L1718: - cbz w22, .L1726 +.L1732: + cbz w22, .L1740 ldrh w19, [x28,824] ldr x0, [x28,1232] udiv w24, w23, w19 @@ -10768,7 +10887,7 @@ FtlVendorPartRead: cmp w19, w22 csel w19, w0, w19, hi lsl w27, w19, 9 - cbz w4, .L1720 + cbz w4, .L1734 ldr x0, [x28,1064] mov w1, 1 str x0, [x29,128] @@ -10784,7 +10903,7 @@ FtlVendorPartRead: ldr w0, [x28,1408] csinv w21, w21, wzr, ne cmp w0, 256 - bne .L1722 + bne .L1736 mov w1, w20 mov w2, w4 mov x0, x26 @@ -10793,28 +10912,28 @@ FtlVendorPartRead: mov w1, w20 ldr x2, [x28,1064] bl FtlMapWritePage -.L1722: +.L1736: ldr x1, [x28,1064] ubfiz x24, x24, 9, 16 mov x0, x25 mov w2, w27 add x1, x1, x24 bl ftl_memcpy - b .L1723 -.L1720: + b .L1737 +.L1734: mov x0, x25 mov w1, w4 mov w2, w27 bl ftl_memset -.L1723: +.L1737: add w20, w20, 1 sub w22, w22, w19 add w23, w23, w19 add x25, x25, x27, sxtw - b .L1718 -.L1726: + b .L1732 +.L1740: mov w0, w21 -.L1717: +.L1731: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -10852,13 +10971,13 @@ FtlUpdateVaildLpn: adrp x1, .LANCHOR2 add x3, x1, :lo12:.LANCHOR2 ldrh w2, [x3,3888] - cbnz w0, .L1730 + cbnz w0, .L1744 cmp w2, 4 - bhi .L1730 + bhi .L1744 add w2, w2, 1 strh w2, [x3,3888] - b .L1729 -.L1730: + b .L1743 +.L1744: add x0, x1, :lo12:.LANCHOR2 mov w7, 65535 strh wzr, [x0,3888] @@ -10866,20 +10985,20 @@ FtlUpdateVaildLpn: ldrh w5, [x0,756] ldr x6, [x0,1184] mov x0, 0 -.L1731: +.L1745: cmp w5, w0, uxth - bls .L1729 + bls .L1743 ldrh w4, [x6,x0,lsl 1] cmp w4, w7 - beq .L1732 + beq .L1746 add x3, x1, :lo12:.LANCHOR2 ldr w2, [x3,3892] add w2, w4, w2 str w2, [x3,3892] -.L1732: +.L1746: add x0, x0, 1 - b .L1731 -.L1729: + b .L1745 +.L1743: ret .size FtlUpdateVaildLpn, .-FtlUpdateVaildLpn .align 2 @@ -10893,13 +11012,13 @@ FtlMapBlkWriteDumpData: ldr w1, [x0,56] ldrh w19, [x0,6] ldr x4, [x0,40] - cbz w1, .L1735 + cbz w1, .L1749 adrp x1, .LANCHOR2 str wzr, [x0,56] add x2, x1, :lo12:.LANCHOR2 mov x21, x1 ldr w3, [x2,1400] - cbnz w3, .L1735 + cbnz w3, .L1749 mov x20, x0 sub w19, w19, #1 add x0, x2, 1408 @@ -10911,23 +11030,23 @@ FtlMapBlkWriteDumpData: str x1, [x0,8] ldr w3, [x4,x3] str w3, [x0,4] - cbz w3, .L1739 + cbz w3, .L1753 mov w1, 1 mov w2, w1 bl FlashReadPages - b .L1740 -.L1739: + b .L1754 +.L1753: ldrh w2, [x2,828] mov x0, x1 mov w1, 255 bl ftl_memset -.L1740: +.L1754: add x2, x21, :lo12:.LANCHOR2 mov x0, x20 mov w1, w19 ldr x2, [x2,1416] bl FtlMapWritePage -.L1735: +.L1749: ldp x19, x20, [sp,16] ldr x21, [sp,32] ldp x29, x30, [sp], 48 @@ -10946,7 +11065,7 @@ FtlVpcTblFlush: add x19, x22, :lo12:.LANCHOR2 stp x23, x24, [sp,48] ldr w0, [x19,1400] - cbnz w0, .L1743 + cbnz w0, .L1757 ldr x21, [x19,1112] add x20, x19, 3520 ldr x1, [x19,1048] @@ -11026,7 +11145,7 @@ FtlVpcTblFlush: ldr x1, [x1,#:lo12:.LANCHOR0+16] bl ftl_memcpy ldrh w0, [x19,860] - cbz w0, .L1744 + cbz w0, .L1758 ldrh w0, [x19,756] ldrh w2, [x19,856] lsr w1, w0, 3 @@ -11038,14 +11157,14 @@ FtlVpcTblFlush: add x0, x1, x0 ldr x1, [x19,1240] bl ftl_memcpy -.L1744: +.L1758: add x19, x22, :lo12:.LANCHOR2 mov w0, 0 mov w23, 0 mov w25, 65535 add x20, x19, 1408 bl FtlUpdateVaildLpn -.L1745: +.L1759: ldr x0, [x19,1048] str x0, [x20,8] ldr x0, [x19,1112] @@ -11063,7 +11182,7 @@ FtlVpcTblFlush: ldrh w1, [x19,3898] sub w0, w0, #1 cmp w1, w0 - blt .L1746 + blt .L1760 ldrh w0, [x19,3896] ldrh w25, [x19,3900] strh wzr, [x19,3898] @@ -11083,45 +11202,45 @@ FtlVpcTblFlush: mov w3, w1 mov x0, x20 bl FlashProgPages -.L1746: +.L1760: ldrh w1, [x19,3898] ldr w2, [x20] add w1, w1, 1 cmn w2, #1 uxth w1, w1 strh w1, [x19,3898] - bne .L1747 + bne .L1761 cmp w1, 1 - bne .L1748 + bne .L1762 ldrh w1, [x19,820] sub w1, w1, #1 strh w1, [x19,3898] -.L1748: +.L1762: add w23, w23, 1 uxth w23, w23 cmp w23, 3 - bls .L1745 + bls .L1759 add x22, x22, :lo12:.LANCHOR2 - adrp x0, .LC44 - add x0, x0, :lo12:.LC44 + adrp x0, .LC46 + add x0, x0, :lo12:.LC46 mov w2, w23 ldr w1, [x22,1412] bl printk mov w0, 1 str w0, [x22,1400] - b .L1743 -.L1747: + b .L1757 +.L1761: cmp w1, 1 - beq .L1745 + beq .L1759 cmp w2, 256 - beq .L1745 + beq .L1759 mov w0, 65535 cmp w25, w0 - beq .L1743 + beq .L1757 mov w0, w25 mov w1, 1 bl FtlFreeSysBlkQueueIn -.L1743: +.L1757: mov w0, 0 ldr x25, [sp,64] ldp x19, x20, [sp,16] @@ -11172,19 +11291,19 @@ FtlScanSysBlk: mov w2, 12 bl ftl_memset ldrh w21, [x20,756] -.L1755: +.L1769: add x1, x19, :lo12:.LANCHOR2 ldrh w0, [x1,758] cmp w0, w21 - bls .L1796 + bls .L1810 mov x27, 0 ldrh w3, [x1,748] ldrh w2, [x1,830] mov w20, w27 mov x23, x1 -.L1797: +.L1811: cmp w3, w27, uxth - bls .L1830 + bls .L1844 add x0, x23, 776 mov w1, w21 str x2, [x29,112] @@ -11195,7 +11314,7 @@ FtlScanSysBlk: bl FtlBbmIsBadBlock ldr x3, [x29,120] ldr x2, [x29,112] - cbnz w0, .L1756 + cbnz w0, .L1770 mov w0, 56 ldr x1, [x23,992] lsl w28, w28, 10 @@ -11214,11 +11333,11 @@ FtlScanSysBlk: ldr x4, [x23,1128] add x1, x4, x1, sxtw 2 str x1, [x0,16] -.L1756: +.L1770: add x27, x27, 1 - b .L1797 -.L1830: - cbz w20, .L1759 + b .L1811 +.L1844: + cbz w20, .L1773 add x0, x19, :lo12:.LANCHOR2 mov w1, w20 mov w2, 1 @@ -11227,9 +11346,9 @@ FtlScanSysBlk: adrp x28, .LANCHOR0 ldr x0, [x0,992] bl FlashReadPages -.L1760: +.L1774: cmp w20, w23, uxth - bls .L1759 + bls .L1773 add x0, x19, :lo12:.LANCHOR2 mul x5, x23, x26 ldr x0, [x0,992] @@ -11239,9 +11358,9 @@ FtlScanSysBlk: cmn w0, #1 ldr x25, [x1,16] ubfx x24, x4, 10, 16 - bne .L1762 + bne .L1776 mov w6, 16 -.L1761: +.L1775: add x7, x19, :lo12:.LANCHOR2 str x6, [x29,104] str x7, [x29,112] @@ -11262,44 +11381,44 @@ FtlScanSysBlk: ldr x5, [x29,120] ldr x6, [x29,104] ldr x0, [x7,992] - bne .L1763 + bne .L1777 str w27, [x0,x5] - b .L1762 -.L1763: + b .L1776 +.L1777: ldr w0, [x0,x5] cmn w0, #1 - bne .L1762 + bne .L1776 sub w6, w6, #1 uxth w6, w6 - cbnz w6, .L1761 -.L1762: + cbnz w6, .L1775 +.L1776: add x0, x19, :lo12:.LANCHOR2 ldr x1, [x0,992] ldr w1, [x1,x5] cmn w1, #1 - beq .L1765 + beq .L1779 ldr w0, [x0,872] cmn w0, #1 - beq .L1766 + beq .L1780 ldr w1, [x25,4] cmp w0, w1 - bhi .L1767 -.L1766: + bhi .L1781 +.L1780: ldr w0, [x25,4] cmn w0, #1 - beq .L1767 + beq .L1781 add x1, x19, :lo12:.LANCHOR2 add w0, w0, 1 str w0, [x1,872] -.L1767: +.L1781: ldrh w0, [x25] mov w1, 61604 cmp w0, w1 - beq .L1769 - bhi .L1770 + beq .L1783 + bhi .L1784 mov w1, 61574 cmp w0, w1 - bne .L1768 + bne .L1782 add x5, x19, :lo12:.LANCHOR2 ldrh w6, [x5,840] ldrh w0, [x5,1392] @@ -11307,16 +11426,16 @@ FtlScanSysBlk: ldr x5, [x5,1224] sxth x1, w2 sub w2, w2, w0 - b .L1783 -.L1770: + b .L1797 +.L1784: mov w1, 61634 cmp w0, w1 - beq .L1772 + beq .L1786 cmp w0, w22 - bne .L1768 + bne .L1782 mov w0, w24 - b .L1829 -.L1772: + b .L1843 +.L1786: add x5, x19, :lo12:.LANCHOR2 ldr w6, [x5,848] ldrh w0, [x5,3908] @@ -11327,27 +11446,27 @@ FtlScanSysBlk: sub w2, w2, #1 sxth x1, w1 sxth w2, w2 -.L1774: +.L1788: cmp w1, w2 - ble .L1831 + ble .L1845 sbfiz x7, x1, 2, 32 ldr w10, [x25,4] sxth x8, w1 ldr w9, [x5,x7] cmp w10, w9 - bls .L1775 + bls .L1789 ldr w2, [x5] - cbnz w2, .L1776 + cbnz w2, .L1790 cmp w0, w6 - beq .L1776 + beq .L1790 add x2, x19, :lo12:.LANCHOR2 add w0, w0, 1 strh w0, [x2,3908] -.L1776: +.L1790: mov w0, 0 -.L1777: +.L1791: cmp w0, w1 - beq .L1832 + beq .L1846 add x5, x19, :lo12:.LANCHOR2 sxtw x2, w0 lsl x6, x2, 2 @@ -11362,31 +11481,31 @@ FtlScanSysBlk: add x6, x5, x2 ldrh w6, [x6,2] strh w6, [x5,x2] - b .L1777 -.L1832: + b .L1791 +.L1846: add x2, x19, :lo12:.LANCHOR2 ldr w5, [x25,4] ldr x0, [x2,1256] str w5, [x0,x7] ldr x0, [x2,1192] strh w24, [x0,x8,lsl 1] - tbz w1, #31, .L1779 - b .L1768 -.L1775: + tbz w1, #31, .L1793 + b .L1782 +.L1789: sub w1, w1, #1 sxth x1, w1 - b .L1774 -.L1831: - tbz w1, #31, .L1812 - b .L1768 -.L1779: + b .L1788 +.L1845: + tbz w1, #31, .L1826 + b .L1782 +.L1793: ldrh w0, [x2,3908] ldr w2, [x2,848] sub w2, w2, w0 sub w2, w2, #1 cmp w1, w2, sxth - bgt .L1768 -.L1812: + bgt .L1782 +.L1826: add x2, x19, :lo12:.LANCHOR2 add w0, w0, 1 ldr w3, [x25,4] @@ -11394,33 +11513,33 @@ FtlScanSysBlk: ldr x0, [x2,1256] str w3, [x0,x1,lsl 2] ldr x0, [x2,1192] - b .L1828 -.L1789: + b .L1842 +.L1803: sbfiz x7, x1, 2, 32 ldr w10, [x25,4] sxth x8, w1 ldr w9, [x5,x7] cmp w10, w9 - bhi .L1833 + bhi .L1847 sub w1, w1, #1 sxth x1, w1 -.L1783: +.L1797: cmp w1, w2 - bgt .L1789 - b .L1788 -.L1833: + bgt .L1803 + b .L1802 +.L1847: ldr w2, [x5] - cbnz w2, .L1785 + cbnz w2, .L1799 cmp w0, w6 - beq .L1785 + beq .L1799 add x2, x19, :lo12:.LANCHOR2 add w0, w0, 1 strh w0, [x2,1392] -.L1785: +.L1799: mov w0, 0 -.L1786: +.L1800: cmp w0, w1 - beq .L1834 + beq .L1848 add x5, x19, :lo12:.LANCHOR2 sxtw x2, w0 lsl x6, x2, 2 @@ -11435,105 +11554,105 @@ FtlScanSysBlk: add x6, x5, x2 ldrh w6, [x6,2] strh w6, [x5,x2] - b .L1786 -.L1834: + b .L1800 +.L1848: add x0, x19, :lo12:.LANCHOR2 ldr w5, [x25,4] ldr x2, [x0,1224] str w5, [x2,x7] ldr x0, [x0,1208] strh w24, [x0,x8,lsl 1] -.L1788: - tbnz w1, #31, .L1768 +.L1802: + tbnz w1, #31, .L1782 add x0, x19, :lo12:.LANCHOR2 ldrh w2, [x0,840] ldrh w5, [x0,1392] sub w2, w2, #1 sub w2, w2, w5 cmp w1, w2, sxth - bgt .L1768 + bgt .L1782 ldr x2, [x0,1224] add w5, w5, 1 ldr w3, [x25,4] strh w5, [x0,1392] str w3, [x2,x1,lsl 2] ldr x0, [x0,1208] -.L1828: +.L1842: strh w24, [x0,x1,lsl 1] - b .L1768 -.L1769: + b .L1782 +.L1783: add x0, x19, :lo12:.LANCHOR2 add x1, x0, 3896 ldrh w2, [x0,3896] cmp w2, w22 - bne .L1790 + bne .L1804 strh w24, [x0,3896] ldr w0, [x25,4] str w0, [x1,8] - b .L1768 -.L1790: + b .L1782 +.L1804: ldrh w0, [x1,4] cmp w0, w22 - beq .L1791 + beq .L1805 mov w1, 1 bl FtlFreeSysBlkQueueIn -.L1791: +.L1805: add x1, x19, :lo12:.LANCHOR2 ldr w2, [x25,4] add x0, x1, 3896 ldr w5, [x0,8] cmp w5, w2 - bcs .L1792 + bcs .L1806 ldrh w2, [x1,3896] strh w2, [x0,4] strh w24, [x1,3896] ldr w1, [x25,4] str w1, [x0,8] - b .L1768 -.L1792: + b .L1782 +.L1806: strh w24, [x0,4] - b .L1768 -.L1765: + b .L1782 +.L1779: add x0, x28, :lo12:.LANCHOR0 ldrb w1, [x0,136] mov w0, w24 - cbz w1, .L1793 -.L1829: + cbz w1, .L1807 +.L1843: mov w1, 0 -.L1793: +.L1807: bl FtlFreeSysBlkQueueIn -.L1768: +.L1782: add x23, x23, 1 - b .L1760 -.L1759: + b .L1774 +.L1773: add w21, w21, 1 uxth w21, w21 - b .L1755 -.L1796: + b .L1769 +.L1810: ldr x2, [x1,1192] ldrh w0, [x2] - cbz w0, .L1798 -.L1801: + cbz w0, .L1812 +.L1815: add x1, x19, :lo12:.LANCHOR2 ldr x2, [x1,1208] ldrh w0, [x2] - cbz w0, .L1799 - b .L1822 -.L1798: + cbz w0, .L1813 + b .L1836 +.L1812: ldrh w3, [x1,3908] - cbz w3, .L1801 + cbz w3, .L1815 ldr w1, [x1,848] -.L1802: +.L1816: cmp w0, w1 - bcs .L1801 + bcs .L1815 ldrh w3, [x2,w0,sxtw 1] - cbz w3, .L1803 + cbz w3, .L1817 mov w6, w0 -.L1804: +.L1818: add x1, x19, :lo12:.LANCHOR2 ldr w2, [x1,848] cmp w0, w2 - bcs .L1801 + bcs .L1815 sxtw x5, w0 sub w2, w0, w6 ldr x4, [x1,1192] @@ -11548,26 +11667,26 @@ FtlScanSysBlk: str w5, [x4,x2,lsl 2] ldr x1, [x1,1192] strh wzr, [x1,x3] - b .L1804 -.L1803: + b .L1818 +.L1817: add w0, w0, 1 sxth w0, w0 - b .L1802 -.L1799: + b .L1816 +.L1813: ldrh w3, [x1,1392] - cbz w3, .L1822 + cbz w3, .L1836 ldrh w1, [x1,840] -.L1807: +.L1821: cmp w0, w1 mov w6, w0 - bge .L1822 + bge .L1836 ldrh w3, [x2,w0,sxtw 1] - cbz w3, .L1808 -.L1809: + cbz w3, .L1822 +.L1823: add x1, x19, :lo12:.LANCHOR2 ldrh w2, [x1,840] cmp w0, w2 - bge .L1822 + bge .L1836 sxtw x5, w0 sub w2, w0, w6 ldr x4, [x1,1208] @@ -11582,12 +11701,12 @@ FtlScanSysBlk: str w5, [x4,x2,lsl 2] ldr x1, [x1,1208] strh wzr, [x1,x3] - b .L1809 -.L1808: + b .L1823 +.L1822: add w0, w0, 1 sxth w0, w0 - b .L1807 -.L1822: + b .L1821 +.L1836: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -11615,18 +11734,18 @@ FtlLoadEctTbl: mov w0, 17221 movk w0, 0x4254, lsl 16 cmp w1, w0 - beq .L1836 - adrp x0, .LC45 - adrp x1, .LC46 - add x1, x1, :lo12:.LC46 - add x0, x0, :lo12:.LC45 + beq .L1850 + adrp x0, .LC47 + adrp x1, .LC48 + add x1, x1, :lo12:.LC48 + add x0, x0, :lo12:.LC47 bl printk ldrh w2, [x19,1144] mov w1, 0 ldr x0, [x19,1160] lsl w2, w2, 9 bl ftl_memset -.L1836: +.L1850: mov w0, 0 ldr x19, [sp,16] ldp x29, x30, [sp], 32 @@ -11639,10 +11758,10 @@ ftl_set_blk_mode: stp x29, x30, [sp, -16]! uxth w0, w0 add x29, sp, 0 - cbz w1, .L1838 + cbz w1, .L1852 bl ftl_set_blk_mode.part.17 - b .L1837 -.L1838: + b .L1851 +.L1852: adrp x1, .LANCHOR0+16 ubfx x2, x0, 5, 11 lsl x2, x2, 2 @@ -11652,7 +11771,7 @@ ftl_set_blk_mode: ldr w1, [x3,x2] bic w0, w1, w0 str w0, [x3,x2] -.L1837: +.L1851: ldp x29, x30, [sp], 16 ret .size ftl_set_blk_mode, .-ftl_set_blk_mode @@ -11670,301 +11789,645 @@ ftl_get_blk_mode: ret .size ftl_get_blk_mode, .-ftl_get_blk_mode .align 2 - .global FtlMapTblRecovery - .type FtlMapTblRecovery, %function -FtlMapTblRecovery: - stp x29, x30, [sp, -128]! - mov w1, 0 + .global FtlCheckVpc + .type FtlCheckVpc, %function +FtlCheckVpc: + stp x29, x30, [sp, -96]! + adrp x1, .LANCHOR3 + adrp x0, .LC49 + add x1, x1, :lo12:.LANCHOR3 add x29, sp, 0 + add x1, x1, 16 + add x0, x0, :lo12:.LC49 + str x25, [sp,64] stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + mov w20, 0 stp x21, x22, [sp,32] stp x23, x24, [sp,48] - stp x25, x26, [sp,64] - stp x27, x28, [sp,80] - mov x19, x0 - adrp x21, .LANCHOR2 - ldr x0, [x0,40] - mov w26, 0 - str x0, [x29,120] + add x19, x19, :lo12:.LANCHOR2 + bl printk + add x0, x19, 3912 + mov w1, 0 + mov x2, 8192 + bl memset +.L1856: + ldr w0, [x19,1396] + cmp w20, w0 + bcs .L1873 + mov w0, w20 + add x1, x29, 92 + mov w2, 0 + bl log2phys + ldr w0, [x29,92] + cmn w0, #1 + beq .L1857 + lsr w0, w0, 10 + bl P2V_block_in_plane + uxth w0, w0 + add x2, x19, 3912 + ldrh w1, [x2,w0,sxtw 1] + add w1, w1, 1 + strh w1, [x2,w0,sxtw 1] +.L1857: + add w20, w20, 1 + b .L1856 +.L1873: + ldr x1, [x19,1184] + adrp x0, .LC50 + ldrh w3, [x19,756] + add x0, x0, :lo12:.LC50 + mov w2, 2 + adrp x21, .LC52 + mov w20, 0 + add x21, x21, :lo12:.LC52 + bl rknand_print_hex + adrp x0, .LC51 + ldrh w3, [x19,756] + add x0, x0, :lo12:.LC51 + add x1, x19, 3912 + mov w2, 2 + bl rknand_print_hex +.L1859: + ldrh w0, [x19,756] + cmp w0, w20 + bls .L1874 + ubfiz x0, x20, 1, 16 + ldr x1, [x19,1184] + ldrh w2, [x1,x0] + add x0, x19, 3912 + ldrh w3, [x0,w20,sxtw 1] + cmp w2, w3 + beq .L1860 + mov x0, x21 + mov w1, w20 + bl printk +.L1860: + add w20, w20, 1 + uxth w20, w20 + b .L1859 +.L1874: + ldr x0, [x19,3592] + cbz x0, .L1855 + ldr x20, [x19,1280] + adrp x22, .LC53 + ldrh w23, [x19,3600] + mov w21, 0 + sub x20, x0, x20 + mov x0, -6148914691236517206 + asr x20, x20, 1 + add x22, x22, :lo12:.LC53 + mov w24, 6 + mov w25, 65535 + madd x20, x0, x20, x20 + uxth w20, w20 +.L1863: + cmp w21, w23 + beq .L1855 + ubfiz x0, x20, 1, 16 + ldr x1, [x19,1184] + ldrh w2, [x1,x0] + cbz w2, .L1864 + add x3, x19, 3912 + mov x0, x22 + mov w1, w20 + ldrh w3, [x3,w20,sxtw 1] + bl printk +.L1864: + umull x20, w20, w24 + ldr x0, [x19,1280] + ldrh w20, [x0,x20] + cmp w20, w25 + beq .L1855 + add w21, w21, 1 + uxth w21, w21 + b .L1863 +.L1855: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size FtlCheckVpc, .-FtlCheckVpc + .align 2 + .global FtlDumpSysBlock + .type FtlDumpSysBlock, %function +FtlDumpSysBlock: + sub sp, sp, #96 + adrp x2, .LANCHOR2 + add x2, x2, :lo12:.LANCHOR2 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x19, x20, [sp,32] + stp x21, x22, [sp,48] + stp x23, x24, [sp,64] + str x25, [sp,80] + add x19, x2, 1408 + uxth w23, w0 + adrp x22, .LC54 + ldr x0, [x2,1048] + adrp x25, .LC55 + str x0, [x19,8] + lsl w24, w23, 10 + ldr x0, [x2,1112] + mov w20, 0 + str x0, [x19,16] + mov x21, x2 + add x22, x22, :lo12:.LC54 + add x25, x25, :lo12:.LC55 +.L1876: + ldrh w0, [x21,820] + cmp w20, w0 + bge .L1882 + mov w1, 1 + orr w0, w20, w24 + mov w2, w1 + str w0, [x19,4] + mov x0, x19 + bl FlashReadPages + ldr x0, [x19,8] + mov w1, w23 + ldr x7, [x19,16] + ldr w0, [x0] + str w0, [sp] + mov x0, x22 + ldr w4, [x7] + ldr w5, [x7,4] + ldr w6, [x7,8] + ldr w2, [x19] + ldr w3, [x19,4] + ldr w7, [x7,12] + bl printk + ldr x0, [x19,16] + ldr w0, [x0] + cmn w0, #1 + beq .L1877 + ldr x1, [x21,1048] + mov x0, x25 + mov w2, 4 + mov w3, 768 + bl rknand_print_hex +.L1877: + add w20, w20, 1 + sxth w20, w20 + b .L1876 +.L1882: + sub sp, x29, #16 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldr x25, [sp,80] + ldp x29, x30, [sp,16] + add sp, sp, 96 + ret + .size FtlDumpSysBlock, .-FtlDumpSysBlock + .align 2 + .global Ftlscanalldata + .type Ftlscanalldata, %function +Ftlscanalldata: + sub sp, sp, #96 + adrp x0, .LC56 + add x0, x0, :lo12:.LC56 + mov w1, 0 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x23, x24, [sp,64] + adrp x23, .LANCHOR2 + stp x21, x22, [sp,48] + adrp x21, .LC57 + add x22, x23, :lo12:.LANCHOR2 + stp x19, x20, [sp,32] + add x21, x21, :lo12:.LC57 + mov w20, 0 + add x19, x22, 1408 + bl printk +.L1884: + add x0, x23, :lo12:.LANCHOR2 + ldr w0, [x0,1396] + cmp w20, w0 + bcs .L1891 + mov w0, w20 + add x1, x29, 76 + mov w2, 0 + bl log2phys + and w0, w20, 2047 + cbnz w0, .L1885 + ldr w2, [x29,76] + mov x0, x21 + mov w1, w20 + bl printk +.L1885: + ldr w0, [x29,76] + cmn w0, #1 + beq .L1887 + str w0, [x19,4] + mov w1, 1 + ldr x0, [x22,1048] + mov w2, 0 + str x0, [x19,8] + mov x0, x19 + ldr x24, [x22,1112] + str w20, [x19,24] + str x24, [x19,16] + str wzr, [x19] + bl FlashReadPages + ldr w0, [x19] + cmn w0, #1 + beq .L1888 + cmp w0, 256 + beq .L1888 + ldr w0, [x24,8] + cmp w0, w20 + beq .L1887 +.L1888: + ldr x7, [x19,8] + mov w1, w20 + ldr x6, [x19,16] + ldr w0, [x7,4] + str w0, [sp] + adrp x0, .LC58 + add x0, x0, :lo12:.LC58 + ldr w3, [x6] + ldr w4, [x6,4] + ldr w5, [x6,8] + ldr w2, [x19,4] + ldr w6, [x6,12] + ldr w7, [x7] + bl printk +.L1887: + add w20, w20, 1 + b .L1884 +.L1891: + sub sp, x29, #16 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x29, x30, [sp,16] + add sp, sp, 96 + ret + .size Ftlscanalldata, .-Ftlscanalldata + .align 2 + .global dump_map_info + .type dump_map_info, %function +dump_map_info: + sub sp, sp, #128 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x21, x22, [sp,48] + adrp x22, .LANCHOR2 + add x0, x22, :lo12:.LANCHOR2 + stp x25, x26, [sp,80] + stp x23, x24, [sp,64] + stp x27, x28, [sp,96] + stp x19, x20, [sp,32] + adrp x24, .LC59 + mov w25, 56 + ldrh w21, [x0,756] + mov w26, 4 + mov x27, 56 + add x24, x24, :lo12:.LC59 +.L1893: + add x19, x22, :lo12:.LANCHOR2 + ldrh w0, [x19,758] + cmp w0, w21 + bls .L1906 + mov x23, 0 + ldrh w3, [x19,748] + ldrh w2, [x19,830] + mov w20, w23 +.L1902: + cmp w3, w23, uxth + bls .L1907 + add x0, x19, 776 + mov w1, w21 + str x2, [x29,96] + str x3, [x29,104] + ldrb w0, [x0,x23] + bl V2P_block + uxth w28, w0 + bl FtlBbmIsBadBlock + ldr x3, [x29,104] + ldr x2, [x29,96] + cbnz w0, .L1894 + umull x0, w20, w25 + ldr x1, [x19,992] + lsl w28, w28, 10 + add x1, x1, x0 + str w28, [x1,4] + ldr x1, [x19,992] + ldr x4, [x19,1128] + add x0, x1, x0 + ldr x1, [x19,1072] + str x1, [x0,8] + mul w1, w20, w2 + add w20, w20, 1 + sdiv w1, w1, w26 + uxth w20, w20 + add x1, x4, x1, sxtw 2 + str x1, [x0,16] +.L1894: + add x23, x23, 1 + b .L1902 +.L1907: + cbz w20, .L1897 + add x0, x22, :lo12:.LANCHOR2 + mov w1, w20 + mov w2, 1 + mov x19, 0 + ldr x0, [x0,992] + bl FlashReadPages +.L1898: + cmp w20, w19, uxth + bls .L1897 + add x0, x22, :lo12:.LANCHOR2 + ldr x0, [x0,992] + madd x0, x19, x27, x0 + add x19, x19, 1 + ldr x7, [x0,8] + ldr x6, [x0,16] + ldr w2, [x0,4] + ldr w0, [x7,4] + str w0, [sp] + ubfx x1, x2, 10, 16 + mov x0, x24 + ldr w3, [x6] + ldr w4, [x6,4] + ldr w5, [x6,8] + ldr w7, [x7] + ldr w6, [x6,12] + bl printk + b .L1898 +.L1897: + add w21, w21, 1 + uxth w21, w21 + b .L1893 +.L1906: + adrp x23, .LC60 + mov w21, 0 + add x22, x19, 1408 + add x23, x23, :lo12:.LC60 +.L1901: + ldrh w0, [x19,3908] + cmp w21, w0 + bge .L1904 + sbfiz x24, x21, 1, 32 + mov w20, 0 +.L1905: + ldrh w0, [x19,820] + cmp w20, w0 + bge .L1908 + ldr x0, [x19,1192] + mov w1, 1 + mov w2, w1 + ldrh w0, [x0,x24] + orr w0, w20, w0, lsl 10 + str w0, [x22,4] + mov x0, x22 + add w20, w20, 1 + bl FlashReadPages + sxth w20, w20 + ldr x0, [x22,8] + ldr x1, [x19,1192] + ldr x7, [x22,16] + ldr w2, [x0] + ldrh w1, [x1,x24] + str w2, [sp] + ldr w0, [x0,4] + str w0, [sp,8] + mov x0, x23 + ldr w4, [x7] + ldr w5, [x7,4] + ldr w6, [x7,8] + ldr w2, [x22] + ldr w3, [x22,4] + ldr w7, [x7,12] + bl printk + b .L1905 +.L1908: + add w21, w21, 1 + sxth w21, w21 + b .L1901 +.L1904: + ldr x1, [x19,1192] + adrp x0, .LC61 + ldr w3, [x19,848] + add x0, x0, :lo12:.LC61 + mov w2, 2 + bl rknand_print_hex + ldr x1, [x19,1240] + adrp x0, .LC62 + ldrh w3, [x19,856] + add x0, x0, :lo12:.LC62 + mov w2, 4 + bl rknand_print_hex + ldr x1, [x19,1248] + adrp x0, .LC63 + ldrh w3, [x19,856] + add x0, x0, :lo12:.LC63 + mov w2, 4 + bl rknand_print_hex + sub sp, x29, #16 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x25, x26, [sp,80] + ldp x27, x28, [sp,96] + ldp x29, x30, [sp,16] + add sp, sp, 128 + ret + .size dump_map_info, .-dump_map_info + .align 2 + .global FtlMapTblRecovery + .type FtlMapTblRecovery, %function +FtlMapTblRecovery: + stp x29, x30, [sp, -128]! + mov w1, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + mov x19, x0 + adrp x20, .LANCHOR2 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] ldrh w23, [x19,6] - ldrh w0, [x19,8] - str w0, [x29,116] + mov w27, 0 + ldr x0, [x0,40] lsl w2, w23, 2 - ldr x0, [x29,120] + ldrh w24, [x19,8] + str x0, [x29,120] ldr x22, [x19,16] ldr x25, [x19,24] bl ftl_memset + add x5, x20, :lo12:.LANCHOR2 + str x20, [x29,112] + add x4, x5, 1408 str wzr, [x19,52] - add x1, x21, :lo12:.LANCHOR2 str wzr, [x19,48] - add x6, x1, 1408 - mov x27, x1 - mov x24, x6 - ldr x0, [x1,1048] - ldr x20, [x1,1112] - str x0, [x1,1416] + mov x26, x5 + ldr x0, [x5,1048] + mov x20, x4 + ldr x21, [x5,1112] + str x0, [x5,1416] mov w0, -1 - str x20, [x1,1424] + str x21, [x5,1424] strh w0, [x19] strh w0, [x19,2] mov w0, 1 str w0, [x19,56] - ldr w0, [x29,116] - sub w0, w0, #1 - str w0, [x29,112] -.L1842: - ldr w0, [x29,116] - cmp w26, w0 - bge .L1859 - ldr w0, [x29,112] - sxtw x28, w26 - cmp w26, w0 - bne .L1843 + sub w0, w24, #1 + str w0, [x29,108] +.L1910: + cmp w27, w24 + bge .L1927 + ldr w0, [x29,108] + sxtw x28, w27 + cmp w27, w0 + bne .L1911 lsl x0, x28, 1 mov w1, 1 add x24, x22, x0 ldrh w0, [x22,x0] + mov w22, 0 bl FtlGetLastWrittenPage - strh w26, [x19] - sxth w27, w0 + strh w27, [x19] + sxth w26, w0 add w0, w0, 1 strh w0, [x19,2] - add x26, x21, :lo12:.LANCHOR2 - add w27, w27, 1 - add x26, x26, 1408 + add w26, w26, 1 ldr w0, [x25,x28,lsl 2] - mov w25, 0 str w0, [x19,48] -.L1844: - cmp w25, w27 - bge .L1859 + ldr x0, [x29,112] + add x25, x0, :lo12:.LANCHOR2 + add x25, x25, 1408 +.L1912: + cmp w22, w26 + bge .L1927 ldrh w0, [x24] mov w1, 1 mov w2, w1 - orr w0, w25, w0, lsl 10 - str w0, [x26,4] - mov x0, x26 + orr w0, w22, w0, lsl 10 + str w0, [x25,4] + mov x0, x25 bl FlashReadPages - ldr w0, [x26] + ldr w0, [x25] cmn w0, #1 - beq .L1845 - ldrh w0, [x20,8] + beq .L1913 + ldrh w0, [x21,8] cmp w0, w23 - bcs .L1846 - ldrh w2, [x20] + bcs .L1914 + ldrh w2, [x21] ldrh w1, [x19,4] cmp w2, w1 - bne .L1846 + bne .L1914 ubfiz x0, x0, 2, 16 ldr x2, [x29,120] - ldr w1, [x26,4] + ldr w1, [x25,4] str w1, [x2,x0] - b .L1846 -.L1845: + b .L1914 +.L1913: ldrh w0, [x24] strh w0, [x19,60] -.L1846: - add w25, w25, 1 - sxth w25, w25 - b .L1844 -.L1859: - add x20, x21, :lo12:.LANCHOR2 - add x0, x20, 3752 - cmp x19, x0 - bne .L1849 - b .L1886 -.L1843: - ldr x0, [x27,1048] - lsl x1, x28, 1 - str x0, [x24,8] - add x28, x22, x1 - ldrh w0, [x27,820] - ldrh w1, [x22,x1] +.L1914: + add w22, w22, 1 + sxth w22, w22 + b .L1912 +.L1927: + mov x0, x19 + bl ftl_free_no_use_map_blk + ldr x0, [x29,112] + ldrh w1, [x19,2] + add x20, x0, :lo12:.LANCHOR2 + ldrh w0, [x20,820] + cmp w1, w0 + bne .L1917 + mov x0, x19 + bl ftl_map_blk_alloc_new_blk + b .L1917 +.L1911: + ldr x0, [x26,1048] + str x0, [x20,8] + lsl x0, x28, 1 + add x28, x22, x0 + ldrh w1, [x22,x0] + ldrh w0, [x26,820] sub w0, w0, #1 orr w0, w0, w1, lsl 10 mov w1, 1 - str w0, [x24,4] + str w0, [x20,4] mov w2, w1 - mov x0, x24 + mov x0, x20 bl FlashReadPages - ldr w0, [x24] + ldr w0, [x20] cmn w0, #1 - beq .L1873 - ldrh w1, [x20] + beq .L1928 + ldrh w1, [x21] mov w3, 0 ldrh w0, [x19,4] cmp w1, w0 - bne .L1883 - ldrh w0, [x20,8] + bne .L1934 + ldrh w0, [x21,8] mov w1, 64245 cmp w0, w1 - bne .L1883 -.L1851: - ldrh w0, [x27,820] + bne .L1934 +.L1919: + ldrh w0, [x26,820] sub w0, w0, #1 cmp w3, w0 - bge .L1854 - ldr x0, [x27,1048] - sbfiz x2, x3, 3, 32 - ldrh w1, [x0,x2] - cmp w1, w23 - bcs .L1852 - add x2, x0, x2 - ubfiz x1, x1, 2, 16 - ldr w0, [x2,4] + bge .L1922 + ldr x2, [x26,1048] + sbfiz x1, x3, 3, 32 + ldrh w0, [x2,x1] + cmp w0, w23 + bcs .L1920 + add x1, x2, x1 + ubfiz x0, x0, 2, 16 ldr x2, [x29,120] - str w0, [x2,x1] -.L1852: + ldr w1, [x1,4] + str w1, [x2,x0] +.L1920: add w3, w3, 1 sxth w3, w3 - b .L1851 -.L1873: + b .L1919 +.L1928: mov w3, 0 -.L1883: - ldrh w0, [x27,820] +.L1934: + ldrh w0, [x26,820] cmp w3, w0 - bge .L1854 + bge .L1922 ldrh w0, [x28] mov w1, 1 mov w2, w1 - str x3, [x29,104] + str x3, [x29,96] orr w0, w3, w0, lsl 10 - str w0, [x24,4] - mov x0, x24 + str w0, [x20,4] + mov x0, x20 bl FlashReadPages - ldr w0, [x24] - ldr x3, [x29,104] + ldr w0, [x20] + ldr x3, [x29,96] cmn w0, #1 - beq .L1855 - ldrh w1, [x20,8] - cmp w1, w23 - bcs .L1855 - ldrh w2, [x20] - ldrh w0, [x19,4] - cmp w2, w0 - bne .L1855 - ubfiz x1, x1, 2, 16 + beq .L1923 + ldrh w0, [x21,8] + cmp w0, w23 + bcs .L1923 + ldrh w2, [x21] + ldrh w1, [x19,4] + cmp w2, w1 + bne .L1923 + ubfiz x0, x0, 2, 16 ldr x2, [x29,120] - ldr w0, [x24,4] - str w0, [x2,x1] -.L1855: + ldr w1, [x20,4] + str w1, [x2,x0] +.L1923: add w3, w3, 1 sxth w3, w3 - b .L1883 -.L1854: - add w4, w26, 1 - sxth w26, w4 - b .L1842 -.L1871: - ubfiz x23, x24, 2, 32 - ldr x0, [x20,1248] - ldr w1, [x0,x23] - sub w2, w1, #1 - cmn w2, #3 - bls .L1887 -.L1864: - add w24, w24, 1 -.L1862: - ldrh w0, [x20,856] - cmp w24, w0 - bcc .L1871 -.L1849: - mov x0, x19 - add x21, x21, :lo12:.LANCHOR2 - bl ftl_free_no_use_map_blk - ldrh w1, [x19,2] - ldrh w0, [x21,820] - cmp w1, w0 - bne .L1861 - mov x0, x19 - bl ftl_map_blk_alloc_new_blk - b .L1861 -.L1886: - ldrh w0, [x20,860] - cbz w0, .L1849 - adrp x25, .LC47 - mov w24, 0 - add x27, x20, 1408 - add x25, x25, :lo12:.LC47 - b .L1862 -.L1887: - ldr x2, [x20,1240] - ldr w2, [x2,x23] - cmp w1, w2 - beq .L1864 - ldr x1, [x20,1048] - ldr x26, [x20,1112] - str x1, [x27,8] - mov w1, 1 - str x26, [x27,16] - mov w2, w1 - ldr w0, [x0,x23] - str w0, [x27,4] - mov x0, x27 - bl FlashReadPages - ldr w0, [x27] - cmn w0, #1 - beq .L1864 - ldrh w1, [x26] - ldrh w0, [x20,3756] - cmp w1, w0 - bne .L1864 - ldr x0, [x20,1240] - ldr w3, [x26,4] - ldr w1, [x0,x23] - str w1, [x27,4] - ldr w0, [x0,x23] - cbnz w0, .L1866 - str w0, [x26,4] - b .L1867 -.L1866: - mov w1, 1 - mov x0, x27 - mov w2, w1 - str x3, [x29,120] - bl FlashReadPages - ldr x3, [x29,120] -.L1867: - ldr w4, [x26,4] - cmp w3, w4 - bls .L1864 - ldr x1, [x20,1248] - mov x0, x25 - ldr x2, [x20,1240] - ldr w1, [x1,x23] - ldr w2, [x2,x23] - bl printk - ldr x0, [x20,1248] - ldr w1, [x0,x23] - ldr x0, [x20,1240] - str w1, [x0,x23] - mov w1, 0 - ldr x0, [x20,1248] - ldrh w3, [x20,3908] - ldr w2, [x0,x23] - ubfx x2, x2, 10, 16 -.L1868: - cmp w1, w3 - bge .L1888 - ldrh w0, [x22,w1,sxtw 1] - cmp w0, w2 - beq .L1864 - add w1, w1, 1 - sxth w1, w1 - b .L1868 -.L1888: - ldr w0, [x20,848] - cmp w3, w0 - bcs .L1864 - ubfiz x3, x3, 1, 16 - strh w2, [x22,x3] - ldrh w0, [x20,3908] - add w0, w0, 1 - strh w0, [x20,3908] - mov w0, w2 - bl remove_from_free_sys_Queue - b .L1864 -.L1861: + b .L1934 +.L1922: + add w6, w27, 1 + sxth w27, w6 + b .L1910 +.L1917: mov x0, x19 bl ftl_map_blk_gc mov x0, x19 @@ -12032,11 +12495,11 @@ FtlL2PDataInit: bl ftl_memset mov w2, 0 mov w4, -1 -.L1891: +.L1937: add x0, x20, :lo12:.LANCHOR2 ldrh w1, [x0,858] cmp w1, w2 - bls .L1893 + bls .L1939 ldr x3, [x0,1264] ubfiz x1, x2, 4, 16 add x3, x3, x1 @@ -12054,8 +12517,8 @@ FtlL2PDataInit: and x1, x1, -4 add x0, x0, x1 str x0, [x3,8] - b .L1891 -.L1893: + b .L1937 +.L1939: ldr w3, [x0,848] add x1, x0, 3752 strh w3, [x0,3762] @@ -12107,41 +12570,41 @@ ftl_sb_update_avl_pages: strh wzr, [x0,4] mov w6, 65535 ldrh w4, [x4,748] -.L1896: +.L1942: cmp w2, w4 - bcs .L1902 + bcs .L1948 add x5, x0, x2, sxtw 1 ldrh w5, [x5,16] cmp w5, w6 - beq .L1897 + beq .L1943 ldrh w5, [x0,4] add w5, w5, 1 strh w5, [x0,4] -.L1897: +.L1943: add w2, w2, 1 uxth w2, w2 - b .L1896 -.L1902: + b .L1942 +.L1948: add x3, x3, :lo12:.LANCHOR2 mov w6, 65535 add x4, x0, x4, uxth 1 ldrh w5, [x3,818] mov x3, x0 -.L1899: +.L1945: cmp x3, x4 - beq .L1903 + beq .L1949 ldrh w2, [x3,16] cmp w2, w6 - beq .L1900 + beq .L1946 ldrh w2, [x0,4] add w2, w5, w2 sub w2, w2, #1 sub w2, w2, w1 strh w2, [x0,4] -.L1900: +.L1946: add x3, x3, 2 - b .L1899 -.L1903: + b .L1945 +.L1949: ret .size ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages .align 2 @@ -12162,9 +12625,9 @@ FtlReUsePrevPpa: ubfiz x22, x0, 1, 16 ldr x3, [x2,1184] ldrh w1, [x3,x22] - cbnz w1, .L1905 + cbnz w1, .L1951 ldr x19, [x2,3592] - cbz x19, .L1906 + cbz x19, .L1952 ldrh w3, [x2,3600] mov x4, -6148914691236517206 ldr x2, [x2,1280] @@ -12174,11 +12637,11 @@ FtlReUsePrevPpa: madd x19, x4, x19, x19 mov w4, 6 uxth w19, w19 -.L1907: +.L1953: cmp w1, w3 - beq .L1906 + beq .L1952 cmp w19, w0 - bne .L1908 + bne .L1954 add x21, x21, :lo12:.LANCHOR2 mov w1, w19 add x0, x21, 3592 @@ -12192,19 +12655,19 @@ FtlReUsePrevPpa: ldrh w0, [x1,x22] add w0, w0, 1 strh w0, [x1,x22] - b .L1906 -.L1908: + b .L1952 +.L1954: umull x19, w19, w4 ldrh w19, [x2,x19] cmp w19, w5 - beq .L1906 + beq .L1952 add w1, w1, 1 uxth w1, w1 - b .L1907 -.L1905: + b .L1953 +.L1951: add w1, w1, 1 strh w1, [x3,x22] -.L1906: +.L1952: add x1, x29, 60 mov w0, w20 mov w2, 1 @@ -12235,9 +12698,9 @@ make_superblock: mov x23, x1 mov w25, -1 ldrh w24, [x1,748] -.L1914: +.L1960: cmp w24, w21, uxth - bls .L1925 + bls .L1971 add x0, x23, 776 ldrh w1, [x19] ldrb w0, [x0,x21] @@ -12245,16 +12708,16 @@ make_superblock: strh w25, [x22] mov w26, w0 bl FtlBbmIsBadBlock - cbnz w0, .L1915 + cbnz w0, .L1961 strh w26, [x22] ldrb w0, [x19,7] add w0, w0, 1 strb w0, [x19,7] -.L1915: +.L1961: add x21, x21, 1 add x22, x22, 2 - b .L1914 -.L1925: + b .L1960 +.L1971: add x0, x20, :lo12:.LANCHOR2 ldrb w1, [x19,7] strb wzr, [x19,9] @@ -12262,21 +12725,21 @@ make_superblock: mul w1, w1, w2 strh w1, [x19,4] ldr w1, [x0,652] - cbz w1, .L1917 + cbz w1, .L1963 ldrh w1, [x19] ldr x0, [x0,1168] ldrh w0, [x0,x1,lsl 1] cmp w0, 59 - bhi .L1917 + bhi .L1963 mov w0, 1 strb w0, [x19,9] -.L1917: +.L1963: adrp x0, .LANCHOR0+24 ldrb w0, [x0,#:lo12:.LANCHOR0+24] - cbz w0, .L1918 + cbz w0, .L1964 mov w0, 1 strb w0, [x19,9] -.L1918: +.L1964: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -12309,19 +12772,19 @@ FtlLoadSysInfo: ldrh w0, [x20,3896] mov w1, 65535 cmp w0, w1 - bne .L1927 -.L1935: + bne .L1973 +.L1981: mov w19, -1 - b .L1928 -.L1927: + b .L1974 +.L1973: mov w1, 1 bl FtlGetLastWrittenPage sxth w22, w0 add w0, w0, 1 strh w0, [x23,2] mov w23, 61604 -.L1929: - tbnz w22, #31, .L1934 +.L1975: + tbnz w22, #31, .L1980 ldrh w0, [x20,3896] mov w1, 1 mov w2, w1 @@ -12333,18 +12796,18 @@ FtlLoadSysInfo: bl FlashReadPages ldr w0, [x21] cmn w0, #1 - beq .L1930 + beq .L1976 ldr x0, [x20,1048] ldr w1, [x0] mov w0, 19539 movk w0, 0x4654, lsl 16 cmp w1, w0 - bne .L1930 + bne .L1976 ldr x0, [x20,1112] ldrh w0, [x0] cmp w0, w23 - bne .L1930 -.L1934: + bne .L1976 +.L1980: add x20, x19, :lo12:.LANCHOR2 mov w2, 48 add x22, x20, 1408 @@ -12370,7 +12833,7 @@ FtlLoadSysInfo: add x1, x3, x1, lsl 2 bl ftl_memcpy ldrh w0, [x20,860] - cbz w0, .L1932 + cbz w0, .L1978 ldrh w0, [x20,756] ldr x3, [x22,8] lsr w1, w0, 3 @@ -12382,55 +12845,57 @@ FtlLoadSysInfo: and x1, x1, 65532 add x1, x3, x1 bl ftl_memcpy - b .L1932 -.L1930: + b .L1978 +.L1976: sub w22, w22, #1 sxth w22, w22 - b .L1929 -.L1932: + b .L1975 +.L1978: add x0, x19, :lo12:.LANCHOR2 mov w2, 19539 movk w2, 0x4654, lsl 16 ldr w3, [x0,3520] cmp w3, w2 - bne .L1935 + bne .L1981 ldrb w3, [x0,3530] ldrh w2, [x0,770] - ldrh w4, [x0,3528] - strh w4, [x0,3902] + ldrh w6, [x0,3528] + strh w6, [x0,3902] cmp w3, w2 - bne .L1935 + bne .L1981 ldrh w3, [x0,818] add x21, x21, :lo12:.LANCHOR0 ldrh w2, [x0,824] - str w4, [x0,3912] - mul w3, w3, w4 + adrp x4, .LANCHOR4 + add x5, x4, :lo12:.LANCHOR4 + mov x20, x4 + mul w3, w3, w6 str w3, [x0,1396] - strh wzr, [x0,3922] + str w6, [x5,3400] mul w3, w3, w2 str w3, [x21,4048] ldrh w2, [x0,1302] ldr w3, [x0,760] - strb wzr, [x0,3926] + strh wzr, [x5,3410] sub w2, w3, w2 ldrh w3, [x0,748] - sub w2, w2, w4 - ldrh w4, [x0,3534] - strh w4, [x0,3608] + sub w2, w2, w6 + strb wzr, [x5,3414] + strb wzr, [x5,3416] udiv w2, w2, w3 ldrh w3, [x0,3536] - strh w2, [x0,3916] - lsr w5, w3, 6 + strh w2, [x5,3404] + lsr w7, w3, 6 and w3, w3, 63 strb w3, [x0,3614] ldrb w3, [x0,3531] strb w3, [x0,3616] mov w3, -1 - strh w3, [x0,3920] + strh w3, [x5,3408] ldrh w3, [x0,3538] strh w3, [x0,3656] ldrh w3, [x0,3540] - strh w5, [x0,3610] + ldrh w6, [x0,3534] lsr w5, w3, 6 and w3, w3, 63 strb w3, [x0,3662] @@ -12442,8 +12907,9 @@ FtlLoadSysInfo: strh w5, [x0,3658] lsr w5, w3, 6 and w3, w3, 63 - strb wzr, [x0,3928] + strh w6, [x0,3608] strb w3, [x0,3710] + strh w7, [x0,3610] strh w5, [x0,3706] ldrb w3, [x0,3533] strb w3, [x0,3712] @@ -12459,55 +12925,365 @@ FtlLoadSysInfo: str wzr, [x0,908] str wzr, [x0,916] str wzr, [x0,892] - bls .L1936 + bls .L1982 str w1, [x0,872] -.L1936: +.L1982: add x0, x19, :lo12:.LANCHOR2 ldr w1, [x0,3556] ldr w2, [x0,876] cmp w1, w2 - bls .L1937 + bls .L1983 str w1, [x0,876] -.L1937: +.L1983: mov w0, 65535 - cmp w4, w0 - beq .L1938 + cmp w6, w0 + beq .L1984 add x0, x19, :lo12:.LANCHOR2 add x0, x0, 3608 bl make_superblock -.L1938: +.L1984: add x1, x19, :lo12:.LANCHOR2 add x0, x1, 3656 ldrh w2, [x1,3656] mov w1, 65535 cmp w2, w1 - beq .L1939 + beq .L1985 bl make_superblock -.L1939: - add x1, x19, :lo12:.LANCHOR2 - add x0, x1, 3704 - ldrh w2, [x1,3704] +.L1985: + add x19, x19, :lo12:.LANCHOR2 mov w1, 65535 + add x0, x19, 3704 + ldrh w2, [x19,3704] cmp w2, w1 - beq .L1940 + beq .L1986 bl make_superblock -.L1940: - add x19, x19, :lo12:.LANCHOR2 - mov w1, 65535 - add x0, x19, 3920 - ldrh w2, [x19,3920] +.L1986: + add x1, x20, :lo12:.LANCHOR4 mov w19, 0 + add x0, x1, 3408 + ldrh w2, [x1,3408] + mov w1, 65535 cmp w2, w1 - beq .L1928 + beq .L1974 + bl make_superblock +.L1974: + mov w0, w19 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FtlLoadSysInfo, .-FtlLoadSysInfo + .align 2 + .global FtlDumpBlockInfo + .type FtlDumpBlockInfo, %function +FtlDumpBlockInfo: + sub sp, sp, #176 + lsr x0, x0, 10 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x19, x20, [sp,32] + stp x21, x22, [sp,48] + stp x23, x24, [sp,64] + stp x25, x26, [sp,80] + stp x27, x28, [sp,96] + uxtb w24, w1 + bl P2V_block_in_plane + adrp x2, .LANCHOR3 + adrp x20, .LANCHOR2 + uxth w22, w0 + add x1, x2, :lo12:.LANCHOR3 + add x19, x20, :lo12:.LANCHOR2 + adrp x0, .LC49 + add x1, x1, 32 + add x0, x0, :lo12:.LC49 + ldrh w23, [x19,818] + bl printk + ldr x3, [x19,1184] + ubfiz x2, x22, 1, 16 + adrp x0, .LC64 + mov w1, w22 + add x0, x0, :lo12:.LC64 + ldrh w2, [x3,x2] + bl printk + strh w22, [x29,112] + add x0, x29, 112 + bl make_superblock + cbnz w24, .L2000 + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L2000 + mov w0, w22 + bl ftl_get_blk_mode + cmp w0, 1 + mov w22, w0 + bne .L1992 + ldrh w23, [x19,820] + b .L1992 +.L2000: + mov w22, 0 +.L1992: + add x3, x20, :lo12:.LANCHOR2 + adrp x0, .LC65 + adrp x24, .LC60 + add x0, x0, :lo12:.LC65 + mov w1, w22 + mov w2, w23 + ldrh w3, [x3,818] + mov w21, 0 + mov w26, 65535 + mov w27, 56 + mov w25, 4 + add x24, x24, :lo12:.LC60 + bl printk +.L1993: + add x0, x20, :lo12:.LANCHOR2 + mov x3, 0 + mov w19, w3 + ldrh w5, [x0,748] + ldrh w6, [x0,828] + ldrh w7, [x0,830] +.L1994: + cmp w5, w3, uxth + bls .L2008 + add x0, x29, 112 + add x0, x0, x3, lsl 1 + ldrh w1, [x0,16] + cmp w1, w26 + beq .L1995 + add x2, x20, :lo12:.LANCHOR2 + orr w1, w21, w1, lsl 10 + umull x0, w19, w27 + ldr x4, [x2,992] + add x4, x4, x0 + str w1, [x4,4] + ldr x1, [x2,992] + ldr x4, [x2,1072] + add x0, x1, x0 + ldr x2, [x2,1128] + mul w1, w19, w6 + sdiv w1, w1, w25 + add x1, x4, x1, sxtw 2 + str x1, [x0,8] + mul w1, w19, w7 + add w19, w19, 1 + uxth w19, w19 + sdiv w1, w1, w25 + add x1, x2, x1, sxtw 2 + str x1, [x0,16] +.L1995: + add x3, x3, 1 + b .L1994 +.L2008: + add x0, x20, :lo12:.LANCHOR2 + mov w1, w19 + mov w2, w22 + mov x28, 0 + ldr x0, [x0,992] + bl FlashReadPages + mov x8, 56 +.L1997: + cmp w19, w28, uxth + bls .L2009 + add x0, x20, :lo12:.LANCHOR2 + ldrh w1, [x29,112] + mul x2, x28, x8 + str x8, [x29,104] + add x28, x28, 1 + ldr x4, [x0,992] + add x3, x4, x2 + ldr x0, [x3,8] + ldr x7, [x3,16] + ldr w5, [x0] + str w5, [sp] + ldr w0, [x0,4] + str w0, [sp,8] + mov x0, x24 + ldr w2, [x4,x2] + ldr w5, [x7,4] + ldr w4, [x7] + ldr w6, [x7,8] + ldr w3, [x3,4] + ldr w7, [x7,12] + bl printk + ldr x8, [x29,104] + b .L1997 +.L2009: + add w21, w21, 1 + uxth w21, w21 + cmp w21, w23 + bne .L1993 +.L1999: + sub sp, x29, #16 + mov w0, 0 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x25, x26, [sp,80] + ldp x27, x28, [sp,96] + ldp x29, x30, [sp,16] + add sp, sp, 176 + ret + .size FtlDumpBlockInfo, .-FtlDumpBlockInfo + .align 2 + .global FtlScanAllBlock + .type FtlScanAllBlock, %function +FtlScanAllBlock: + sub sp, sp, #144 + adrp x1, .LANCHOR3 + adrp x0, .LC49 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC49 + add x1, x1, 56 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x23, x24, [sp,64] + stp x21, x22, [sp,48] + adrp x23, .LC67 + adrp x22, .LC66 + adrp x24, .LC68 + add x22, x22, :lo12:.LC66 + stp x19, x20, [sp,32] + add x23, x23, :lo12:.LC67 + mov w20, 0 + add x24, x24, :lo12:.LC68 + stp x25, x26, [sp,80] + bl printk +.L2011: + adrp x21, .LANCHOR2 + add x19, x21, :lo12:.LANCHOR2 + ldrh w0, [x19,758] + cmp w0, w20 + bls .L2020 + mov w0, w20 + strh w20, [x29,80] + bl ftl_get_blk_mode + mov w3, w0 + ldr x4, [x19,1184] + ubfiz x2, x20, 1, 16 + mov w1, w20 + mov x0, x22 + ldrh w2, [x4,x2] + bl printk + add x0, x29, 80 bl make_superblock -.L1928: - mov w0, w19 - ldr x23, [sp,48] - ldp x19, x20, [sp,16] - ldp x21, x22, [sp,32] - ldp x29, x30, [sp], 64 + mov x1, 0 + ldrh w6, [x19,748] + ldrh w7, [x19,828] + mov w9, 65535 + ldrh w8, [x19,830] + mov w10, 56 + mov w19, w1 + mov w5, 4 +.L2012: + cmp w6, w1, uxth + bls .L2021 + add x0, x29, 80 + add x0, x0, x1, lsl 1 + ldrh w0, [x0,16] + cmp w0, w9 + beq .L2013 + add x3, x21, :lo12:.LANCHOR2 + lsl w0, w0, 10 + umull x2, w19, w10 + ldr x4, [x3,992] + add x4, x4, x2 + str w0, [x4,4] + ldr x0, [x3,992] + ldr x4, [x3,1072] + add x2, x0, x2 + ldr x3, [x3,1128] + mul w0, w19, w7 + sdiv w0, w0, w5 + add x0, x4, x0, sxtw 2 + str x0, [x2,8] + mul w0, w19, w8 + add w19, w19, 1 + uxth w19, w19 + sdiv w0, w0, w5 + add x0, x3, x0, sxtw 2 + str x0, [x2,16] +.L2013: + add x1, x1, 1 + b .L2012 +.L2021: + add x0, x21, :lo12:.LANCHOR2 + mov w1, w19 + mov w2, 0 + mov x25, 0 + mov x26, 56 + ldr x0, [x0,992] + bl FlashReadPages +.L2015: + add x0, x21, :lo12:.LANCHOR2 + cmp w19, w25, uxth + bls .L2022 + ldr x4, [x0,992] + mul x2, x25, x26 + ldrh w1, [x29,80] + add x25, x25, 1 + add x3, x4, x2 + ldr x0, [x3,8] + ldr x7, [x3,16] + ldr w5, [x0] + str w5, [sp] + ldr w0, [x0,4] + str w0, [sp,8] + mov x0, x23 + ldr w2, [x4,x2] + ldr w5, [x7,4] + ldr w4, [x7] + ldr w6, [x7,8] + ldr w3, [x3,4] + ldr w7, [x7,12] + bl printk + b .L2015 +.L2022: + ldr x0, [x0,992] + mov w1, w19 + mov w2, 1 + mov x25, 0 + mov x26, 56 + bl FlashReadPages +.L2017: + cmp w19, w25, uxth + bls .L2023 + add x0, x21, :lo12:.LANCHOR2 + ldrh w1, [x29,80] + mul x2, x25, x26 + add x25, x25, 1 + ldr x4, [x0,992] + add x3, x4, x2 + ldr x0, [x3,8] + ldr x7, [x3,16] + ldr w5, [x0] + str w5, [sp] + ldr w0, [x0,4] + str w0, [sp,8] + mov x0, x24 + ldr w2, [x4,x2] + ldr w5, [x7,4] + ldr w4, [x7] + ldr w6, [x7,8] + ldr w3, [x3,4] + ldr w7, [x7,12] + bl printk + b .L2017 +.L2023: + add w20, w20, 1 + uxth w20, w20 + b .L2011 +.L2020: + sub sp, x29, #16 + mov w0, 0 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x25, x26, [sp,80] + ldp x29, x30, [sp,16] + add sp, sp, 144 ret - .size FtlLoadSysInfo, .-FtlLoadSysInfo + .size FtlScanAllBlock, .-FtlScanAllBlock .align 2 .global SupperBlkListInit .type SupperBlkListInit, %function @@ -12538,19 +13314,19 @@ SupperBlkListInit: strh wzr, [x19,3600] strh wzr, [x19,862] mov w19, w27 -.L1946: +.L2025: add x0, x21, :lo12:.LANCHOR2 ldrh w1, [x0,756] cmp w19, w1 - bge .L1953 + bge .L2032 mov w20, 0 ldrh w3, [x0,748] ldrh w2, [x0,818] mov w28, w20 mov x26, x0 -.L1954: +.L2033: cmp w28, w3 - bge .L1955 + bge .L2034 add x0, x26, 776 mov w1, w19 str x2, [x29,96] @@ -12560,54 +13336,54 @@ SupperBlkListInit: bl FtlBbmIsBadBlock ldr x3, [x29,104] ldr x2, [x29,96] - cbnz w0, .L1947 + cbnz w0, .L2026 add w20, w2, w20 sxth w20, w20 -.L1947: +.L2026: add w28, w28, 1 sxth w28, w28 - b .L1954 -.L1955: - cbz w20, .L1949 + b .L2033 +.L2034: + cbz w20, .L2028 sdiv w20, w25, w20 sxth w20, w20 - b .L1950 -.L1949: + b .L2029 +.L2028: add x0, x21, :lo12:.LANCHOR2 ldr x0, [x0,1184] strh w24, [x0,w19,sxtw 1] -.L1950: +.L2029: add x0, x21, :lo12:.LANCHOR2 ldr x1, [x0,1280] smaddl x1, w19, w23, x1 strh w20, [x1,4] ldrh w1, [x0,3608] cmp w19, w1 - beq .L1951 + beq .L2030 ldrh w1, [x0,3656] cmp w19, w1 - beq .L1951 + beq .L2030 ldrh w1, [x0,3704] cmp w19, w1 - beq .L1951 + beq .L2030 ldr x0, [x0,1184] ldrh w0, [x0,w19,sxtw 1] - cbnz w0, .L1952 + cbnz w0, .L2031 add w27, w27, 1 mov w0, w19 uxth w27, w27 bl INSERT_FREE_LIST - b .L1951 -.L1952: + b .L2030 +.L2031: add w22, w22, 1 mov w0, w19 uxth w22, w22 bl INSERT_DATA_LIST -.L1951: +.L2030: add w19, w19, 1 sxth w19, w19 - b .L1946 -.L1953: + b .L2025 +.L2032: strh w22, [x0,3584] strh w27, [x0,3600] mov w0, 0 @@ -12623,24 +13399,25 @@ SupperBlkListInit: .global Ftl_save_ext_data .type Ftl_save_ext_data, %function Ftl_save_ext_data: - adrp x0, .LANCHOR2 + adrp x0, .LANCHOR4 mov w1, 19539 - add x0, x0, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LANCHOR4 movk w1, 0x4654, lsl 16 stp x29, x30, [sp, -16]! - add x2, x0, 3968 + add x2, x0, 3456 add x29, sp, 0 - ldr w3, [x0,3968] + ldr w3, [x0,3456] cmp w3, w1 - bne .L1956 + bne .L2035 mov w1, 72 movk w1, 0x5000, lsl 16 str w1, [x2,4] - adrp x1, .LANCHOR4 - add x1, x1, :lo12:.LANCHOR4 - ldr w3, [x1,128] - ldr w1, [x1,132] - str w1, [x2,92] + ldr w1, [x0,3968] + ldr w0, [x0,3972] + str w0, [x2,92] + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + str w1, [x2,88] ldr w1, [x0,880] str w1, [x2,8] ldr w1, [x0,884] @@ -12667,9 +13444,8 @@ Ftl_save_ext_data: mov w1, 1 str w0, [x2,64] mov w0, 0 - str w3, [x2,88] bl FtlVendorPartWrite -.L1956: +.L2035: ldp x29, x30, [sp], 16 ret .size Ftl_save_ext_data, .-Ftl_save_ext_data @@ -12683,30 +13459,30 @@ FtlEctTblFlush: stp x29, x30, [sp, -16]! add x29, sp, 0 ldr w4, [x3,652] - cbz w4, .L1959 + cbz w4, .L2038 ldr w3, [x3,920] cmp w3, 29 mov w3, 4 csel w1, w1, w3, hi -.L1959: +.L2038: adrp x3, .LANCHOR4 add x3, x3, :lo12:.LANCHOR4 - ldrh w4, [x3,136] + ldrh w4, [x3,3976] cmp w4, 31 - bhi .L1960 + bhi .L2039 add w4, w4, 1 mov w1, 1 - strh w4, [x3,136] -.L1960: - cbnz w0, .L1961 + strh w4, [x3,3976] +.L2039: + cbnz w0, .L2040 add x0, x2, :lo12:.LANCHOR2 ldr x3, [x0,1160] ldr w0, [x3,20] add w1, w1, w0 ldr w0, [x3,16] cmp w0, w1 - bcc .L1962 -.L1961: + bcc .L2041 +.L2040: add x2, x2, :lo12:.LANCHOR2 ldr x0, [x2,1160] ldr w1, [x0,16] @@ -12726,7 +13502,7 @@ FtlEctTblFlush: mov w0, 64 bl FtlVendorPartWrite bl Ftl_save_ext_data -.L1962: +.L2041: mov w0, 0 ldp x29, x30, [sp], 16 ret @@ -12740,86 +13516,88 @@ Ftl_load_ext_data: mov w0, 0 add x29, sp, 0 stp x19, x20, [sp,16] - adrp x19, .LANCHOR2 + adrp x19, .LANCHOR4 str x21, [sp,32] - add x20, x19, :lo12:.LANCHOR2 - add x21, x20, 3968 + add x20, x19, :lo12:.LANCHOR4 + add x21, x20, 3456 mov x2, x21 bl FtlVendorPartRead - ldr w1, [x20,3968] + ldr w1, [x20,3456] mov w0, 19539 movk w0, 0x4654, lsl 16 cmp w1, w0 - beq .L1967 + beq .L2046 mov x0, x21 mov w1, 0 mov w2, 512 bl ftl_memset mov w0, 19539 movk w0, 0x4654, lsl 16 - str w0, [x20,3968] -.L1967: - add x0, x19, :lo12:.LANCHOR2 + str w0, [x20,3456] +.L2046: + add x1, x19, :lo12:.LANCHOR4 mov w2, 19539 movk w2, 0x4654, lsl 16 - adrp x20, .LANCHOR4 - ldr w3, [x0,3968] + add x0, x1, 3456 + adrp x20, .LANCHOR2 + ldr w3, [x1,3456] cmp w3, w2 - bne .L1968 - add x2, x20, :lo12:.LANCHOR4 - ldr w3, [x0,4056] - ldr w1, [x0,4028] - str w1, [x0,868] - str w3, [x2,128] - ldr w3, [x0,4060] - str w3, [x2,132] - ldr w2, [x0,3976] - str w2, [x0,880] - ldr w2, [x0,3980] - str w2, [x0,884] - ldr w2, [x0,3984] - str w2, [x0,900] - ldr w2, [x0,3988] - str w2, [x0,896] - ldr w2, [x0,3996] - str w2, [x0,908] - ldr w2, [x0,4000] - str w2, [x0,912] - ldr w2, [x0,4004] - str w2, [x0,888] - ldr w2, [x0,4008] - str w2, [x0,892] - ldr w2, [x0,4012] - str w2, [x0,916] - ldr w2, [x0,4016] - str w2, [x0,920] -.L1968: - add x0, x19, :lo12:.LANCHOR2 + bne .L2047 + ldr w2, [x1,3544] + str w2, [x1,3968] + ldr w2, [x1,3548] + str w2, [x1,3972] + add x1, x20, :lo12:.LANCHOR2 + ldr w2, [x0,8] + str w2, [x1,880] + ldr w2, [x0,12] + str w2, [x1,884] + ldr w2, [x0,16] + str w2, [x1,900] + ldr w2, [x0,20] + str w2, [x1,896] + ldr w2, [x0,28] + str w2, [x1,908] + ldr w2, [x0,32] + str w2, [x1,912] + ldr w2, [x0,36] + str w2, [x1,888] + ldr w2, [x0,40] + str w2, [x1,892] + ldr w2, [x0,44] + str w2, [x1,916] + ldr w2, [x0,48] + ldr w0, [x0,60] + str w2, [x1,920] + str w0, [x1,868] +.L2047: + add x1, x19, :lo12:.LANCHOR4 + add x0, x20, :lo12:.LANCHOR2 + ldr w2, [x1,3524] mov w1, 34661 movk w1, 0x1234, lsl 16 - ldr w2, [x0,4036] str wzr, [x0,864] cmp w2, w1 - bne .L1969 + bne .L2048 mov w1, 1 str w1, [x0,652] - adrp x0, .LC45 - adrp x1, .LC48 - add x0, x0, :lo12:.LC45 - add x1, x1, :lo12:.LC48 + adrp x0, .LC47 + adrp x1, .LC69 + add x0, x0, :lo12:.LC47 + add x1, x1, :lo12:.LC69 bl printk -.L1969: - add x0, x19, :lo12:.LANCHOR2 - add x20, x20, :lo12:.LANCHOR4 +.L2048: + add x0, x20, :lo12:.LANCHOR2 + add x19, x19, :lo12:.LANCHOR4 + ldr x21, [sp,32] ldrh w2, [x0,808] ldr w3, [x0,904] ldr w1, [x0,908] ldrh w0, [x0,756] madd w1, w2, w3, w1 udiv w0, w1, w0 - str w0, [x20,140] + str w0, [x19,3980] ldp x19, x20, [sp,16] - ldr x21, [sp,32] ldp x29, x30, [sp], 48 ret .size Ftl_load_ext_data, .-Ftl_load_ext_data @@ -12842,25 +13620,25 @@ update_multiplier_value: mov w19, w22 ldrh w25, [x1,818] mov x23, x1 -.L1971: +.L2050: cmp w24, w22, uxth - bls .L1978 + bls .L2057 add x0, x23, 776 mov w1, w20 ldrb w0, [x0,x22] bl V2P_block bl FtlBbmIsBadBlock - cbnz w0, .L1972 + cbnz w0, .L2051 add w19, w19, w25 uxth w19, w19 -.L1972: +.L2051: add x22, x22, 1 - b .L1971 -.L1978: - cbz w19, .L1974 + b .L2050 +.L2057: + cbz w19, .L2053 mov w0, 32768 sdiv w19, w0, w19 -.L1974: +.L2053: add x0, x21, :lo12:.LANCHOR2 mov w1, 6 umull x20, w20, w1 @@ -12883,7 +13661,7 @@ GetFreeBlockMinEraseCount: add x2, x2, :lo12:.LANCHOR2 ldr x1, [x2,3592] mov w0, w1 - cbz x1, .L1980 + cbz x1, .L2059 ldr x0, [x2,1280] sub x1, x1, x0 mov x0, -6148914691236517206 @@ -12892,7 +13670,7 @@ GetFreeBlockMinEraseCount: ldr x0, [x2,1168] and x1, x1, 65535 ldrh w0, [x0,x1,lsl 1] -.L1980: +.L2059: ret .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount .align 2 @@ -12904,7 +13682,7 @@ GetFreeBlockMaxEraseCount: add x5, x2, :lo12:.LANCHOR2 ldr x1, [x5,3592] mov w0, w1 - cbz x1, .L1983 + cbz x1, .L2062 ldrh w3, [x5,3600] mov w0, 7 mov w6, 6 @@ -12920,25 +13698,25 @@ GetFreeBlockMaxEraseCount: madd x1, x3, x1, x1 mov w3, 0 uxth w1, w1 -.L1985: +.L2064: cmp w3, w4 - beq .L1988 + beq .L2067 umull x5, w1, w6 ldrh w5, [x0,x5] cmp w5, w7 - bne .L1986 -.L1988: + bne .L2065 +.L2067: add x2, x2, :lo12:.LANCHOR2 ubfiz x1, x1, 1, 16 ldr x0, [x2,1168] ldrh w0, [x0,x1] - b .L1983 -.L1986: + b .L2062 +.L2065: add w3, w3, 1 mov w1, w5 uxth w3, w3 - b .L1985 -.L1983: + b .L2064 +.L2062: ret .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount .align 2 @@ -12946,11 +13724,11 @@ GetFreeBlockMaxEraseCount: .type FtlPrintInfo2buf, %function FtlPrintInfo2buf: stp x29, x30, [sp, -112]! - adrp x1, .LC49 + adrp x1, .LC70 add x29, sp, 0 stp x25, x26, [sp,64] adrp x25, .LANCHOR0 - add x1, x1, :lo12:.LC49 + add x1, x1, :lo12:.LC70 add x25, x25, :lo12:.LANCHOR0 str x27, [sp,80] stp x23, x24, [sp,48] @@ -12960,459 +13738,459 @@ FtlPrintInfo2buf: bl strcpy add x20, x23, 12 ldr w2, [x25,4016] - adrp x1, .LC50 + adrp x1, .LC71 adrp x24, .LANCHOR2 mov x0, x20 - add x1, x1, :lo12:.LC50 + add x1, x1, :lo12:.LC71 add x22, x24, :lo12:.LANCHOR2 bl sprintf add x20, x20, x0, sxtw - adrp x1, .LC51 + adrp x1, .LC72 mov x0, x20 ldr w2, [x22,836] - add x1, x1, :lo12:.LC51 + add x1, x1, :lo12:.LC72 bl sprintf add x20, x20, x0, sxtw adrp x0, .LANCHOR1+3064 ldr w0, [x0,#:lo12:.LANCHOR1+3064] cmp w0, 1 - beq .L1991 + beq .L2070 sub w0, w20, w23 - b .L1992 -.L1991: + b .L2071 +.L2070: add x0, x29, 96 add x1, x29, 100 add x2, x29, 104 add x3, x29, 108 - adrp x19, .LANCHOR4 bl NandcGetTimeCfg - add x19, x19, :lo12:.LANCHOR4 ldr w4, [x29,104] - adrp x1, .LC52 + adrp x1, .LC73 ldr w5, [x29,108] - add x1, x1, :lo12:.LC52 - ldr w3, [x29,100] mov x0, x20 + ldr w3, [x29,100] + add x1, x1, :lo12:.LC73 ldr w2, [x29,96] bl sprintf add x21, x20, x0, sxtw - adrp x1, .LC53 + adrp x1, .LC74 mov x0, x21 - add x1, x1, :lo12:.LC53 + add x1, x1, :lo12:.LC74 add x21, x21, 10 + adrp x20, .LANCHOR4 bl strcpy + add x20, x20, :lo12:.LANCHOR4 ldr w2, [x22,1396] - adrp x1, .LC54 + adrp x1, .LC75 mov x0, x21 - add x1, x1, :lo12:.LC54 + add x1, x1, :lo12:.LC75 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,3892] - adrp x1, .LC55 + adrp x1, .LC76 mov x0, x21 - add x1, x1, :lo12:.LC55 + add x1, x1, :lo12:.LC76 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,900] - adrp x1, .LC56 + adrp x1, .LC77 mov x0, x21 - add x1, x1, :lo12:.LC56 + add x1, x1, :lo12:.LC77 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,888] - adrp x1, .LC57 + adrp x1, .LC78 mov x0, x21 - add x1, x1, :lo12:.LC57 + add x1, x1, :lo12:.LC78 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,884] - adrp x1, .LC58 + adrp x1, .LC79 mov x0, x21 - add x1, x1, :lo12:.LC58 + add x1, x1, :lo12:.LC79 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,892] - adrp x1, .LC59 + adrp x1, .LC80 mov x0, x21 - add x1, x1, :lo12:.LC59 + add x1, x1, :lo12:.LC80 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,896] - adrp x1, .LC60 + adrp x1, .LC81 mov x0, x21 - add x1, x1, :lo12:.LC60 + add x1, x1, :lo12:.LC81 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,880] - adrp x1, .LC61 + adrp x1, .LC82 mov x0, x21 - add x1, x1, :lo12:.LC61 + add x1, x1, :lo12:.LC82 bl sprintf add x21, x21, x0, sxtw - ldr w2, [x19,128] - adrp x1, .LC62 + ldr w2, [x20,3968] + adrp x1, .LC83 mov x0, x21 - add x1, x1, :lo12:.LC62 + add x1, x1, :lo12:.LC83 lsr w2, w2, 11 bl sprintf add x21, x21, x0, sxtw - ldr w2, [x19,132] - adrp x1, .LC63 + ldr w2, [x20,3972] + adrp x1, .LC84 mov x0, x21 - add x1, x1, :lo12:.LC63 + add x1, x1, :lo12:.LC84 lsr w2, w2, 11 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,872] - adrp x1, .LC64 + adrp x1, .LC85 mov x0, x21 - add x1, x1, :lo12:.LC64 + add x1, x1, :lo12:.LC85 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,876] - adrp x1, .LC65 - add x1, x1, :lo12:.LC65 + adrp x1, .LC86 + add x1, x1, :lo12:.LC86 mov x0, x21 bl sprintf add x21, x21, x0, sxtw bl FtlBbtCalcTotleCnt uxth w3, w0 ldrh w2, [x22,1302] - adrp x1, .LC66 + adrp x1, .LC87 mov x0, x21 - add x1, x1, :lo12:.LC66 + add x1, x1, :lo12:.LC87 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3600] - adrp x1, .LC67 + adrp x1, .LC88 mov x0, x21 - add x1, x1, :lo12:.LC67 + add x1, x1, :lo12:.LC88 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,904] - adrp x1, .LC68 + adrp x1, .LC89 mov x0, x21 - add x1, x1, :lo12:.LC68 + add x1, x1, :lo12:.LC89 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,908] - adrp x1, .LC69 + adrp x1, .LC90 mov x0, x21 - add x1, x1, :lo12:.LC69 + add x1, x1, :lo12:.LC90 bl sprintf add x21, x21, x0, sxtw - ldr w2, [x19,140] - adrp x1, .LC70 + ldr w2, [x20,3980] + adrp x1, .LC91 mov x0, x21 - add x1, x1, :lo12:.LC70 + add x1, x1, :lo12:.LC91 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,912] - adrp x1, .LC71 + adrp x1, .LC92 mov x0, x21 - add x1, x1, :lo12:.LC71 + add x1, x1, :lo12:.LC92 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,916] - adrp x1, .LC72 + adrp x1, .LC93 mov x0, x21 - add x1, x1, :lo12:.LC72 + add x1, x1, :lo12:.LC93 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,920] - adrp x1, .LC73 + adrp x1, .LC94 mov x0, x21 - add x1, x1, :lo12:.LC73 + add x1, x1, :lo12:.LC94 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3550] - adrp x1, .LC74 + adrp x1, .LC95 mov x0, x21 - add x1, x1, :lo12:.LC74 + add x1, x1, :lo12:.LC95 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3548] - adrp x1, .LC75 + adrp x1, .LC96 mov x0, x21 - add x1, x1, :lo12:.LC75 + add x1, x1, :lo12:.LC96 bl sprintf add x21, x21, x0, sxtw ldr w2, [x25,4048] - adrp x1, .LC76 + adrp x1, .LC97 mov x0, x21 - add x1, x1, :lo12:.LC76 + add x1, x1, :lo12:.LC97 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,852] - adrp x1, .LC77 + adrp x1, .LC98 mov x0, x21 - add x1, x1, :lo12:.LC77 + add x1, x1, :lo12:.LC98 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,744] - adrp x1, .LC78 + adrp x1, .LC99 mov x0, x21 - add x1, x1, :lo12:.LC78 + add x1, x1, :lo12:.LC99 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,1470] - adrp x1, .LC79 + adrp x1, .LC100 mov x0, x21 - add x1, x1, :lo12:.LC79 + add x1, x1, :lo12:.LC100 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,756] - adrp x1, .LC80 + adrp x1, .LC101 mov x0, x21 - add x1, x1, :lo12:.LC80 + add x1, x1, :lo12:.LC101 bl sprintf add x21, x21, x0, sxtw - ldrh w2, [x22,3916] - adrp x1, .LC81 + ldrh w2, [x20,3404] + adrp x1, .LC102 mov x0, x21 - add x1, x1, :lo12:.LC81 + add x1, x1, :lo12:.LC102 bl sprintf add x21, x21, x0, sxtw ldr w2, [x22,760] - adrp x1, .LC82 + adrp x1, .LC103 mov x0, x21 - add x1, x1, :lo12:.LC82 + add x1, x1, :lo12:.LC103 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3896] - adrp x1, .LC83 + adrp x1, .LC104 mov x0, x21 - add x1, x1, :lo12:.LC83 + add x1, x1, :lo12:.LC104 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,1296] - adrp x1, .LC84 + adrp x1, .LC105 mov x0, x21 - add x1, x1, :lo12:.LC84 + add x1, x1, :lo12:.LC105 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3610] - adrp x1, .LC85 + adrp x1, .LC106 mov x0, x21 - add x1, x1, :lo12:.LC85 + add x1, x1, :lo12:.LC106 bl sprintf add x21, x21, x0, sxtw ldrb w2, [x22,3614] - adrp x1, .LC86 + adrp x1, .LC107 mov x0, x21 - add x1, x1, :lo12:.LC86 + add x1, x1, :lo12:.LC107 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3608] - adrp x1, .LC87 + adrp x1, .LC108 mov x0, x21 - add x1, x1, :lo12:.LC87 + add x1, x1, :lo12:.LC108 bl sprintf add x21, x21, x0, sxtw ldrb w2, [x22,3616] - adrp x1, .LC88 + adrp x1, .LC109 mov x0, x21 - add x1, x1, :lo12:.LC88 + add x1, x1, :lo12:.LC109 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3612] - adrp x1, .LC89 + adrp x1, .LC110 mov x0, x21 - add x1, x1, :lo12:.LC89 + add x1, x1, :lo12:.LC110 bl sprintf add x21, x21, x0, sxtw ldrh w3, [x22,3608] - adrp x1, .LC90 + adrp x1, .LC111 ldr x2, [x22,1184] mov x0, x21 - add x1, x1, :lo12:.LC90 + add x1, x1, :lo12:.LC111 ldrh w2, [x2,x3,lsl 1] bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3658] - adrp x1, .LC91 + adrp x1, .LC112 mov x0, x21 - add x1, x1, :lo12:.LC91 + add x1, x1, :lo12:.LC112 bl sprintf add x21, x21, x0, sxtw ldrb w2, [x22,3662] - adrp x1, .LC92 + adrp x1, .LC113 mov x0, x21 - add x1, x1, :lo12:.LC92 + add x1, x1, :lo12:.LC113 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3656] - adrp x1, .LC93 + adrp x1, .LC114 mov x0, x21 - add x1, x1, :lo12:.LC93 + add x1, x1, :lo12:.LC114 bl sprintf add x21, x21, x0, sxtw ldrb w2, [x22,3664] - adrp x1, .LC94 + adrp x1, .LC115 mov x0, x21 - add x1, x1, :lo12:.LC94 + add x1, x1, :lo12:.LC115 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3660] - adrp x1, .LC95 + adrp x1, .LC116 mov x0, x21 - add x1, x1, :lo12:.LC95 + add x1, x1, :lo12:.LC116 bl sprintf add x21, x21, x0, sxtw ldrh w3, [x22,3656] - adrp x1, .LC96 + adrp x1, .LC117 ldr x2, [x22,1184] mov x0, x21 - add x1, x1, :lo12:.LC96 + add x1, x1, :lo12:.LC117 ldrh w2, [x2,x3,lsl 1] bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3706] - adrp x1, .LC97 + adrp x1, .LC118 mov x0, x21 - add x1, x1, :lo12:.LC97 + add x1, x1, :lo12:.LC118 bl sprintf add x21, x21, x0, sxtw ldrb w2, [x22,3710] - adrp x1, .LC98 + adrp x1, .LC119 mov x0, x21 - add x1, x1, :lo12:.LC98 + add x1, x1, :lo12:.LC119 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3704] - adrp x1, .LC99 + adrp x1, .LC120 mov x0, x21 - add x1, x1, :lo12:.LC99 + add x1, x1, :lo12:.LC120 bl sprintf add x21, x21, x0, sxtw ldrb w2, [x22,3712] - adrp x1, .LC100 + adrp x1, .LC121 mov x0, x21 - add x1, x1, :lo12:.LC100 + add x1, x1, :lo12:.LC121 bl sprintf add x21, x21, x0, sxtw ldrh w2, [x22,3708] - adrp x1, .LC101 + adrp x1, .LC122 mov x0, x21 - add x1, x1, :lo12:.LC101 + add x1, x1, :lo12:.LC122 bl sprintf add x21, x21, x0, sxtw - ldrh w2, [x22,3922] - adrp x1, .LC102 + ldrh w2, [x20,3410] + adrp x1, .LC123 mov x0, x21 - add x1, x1, :lo12:.LC102 + add x1, x1, :lo12:.LC123 bl sprintf add x21, x21, x0, sxtw - ldrb w2, [x22,3926] - adrp x1, .LC103 + ldrb w2, [x20,3414] + adrp x1, .LC124 mov x0, x21 - add x1, x1, :lo12:.LC103 + add x1, x1, :lo12:.LC124 bl sprintf add x21, x21, x0, sxtw - ldrh w2, [x22,3920] - adrp x1, .LC104 + ldrh w2, [x20,3408] + adrp x1, .LC125 mov x0, x21 - add x1, x1, :lo12:.LC104 + add x1, x1, :lo12:.LC125 bl sprintf add x21, x21, x0, sxtw - ldrb w2, [x22,3928] - adrp x1, .LC105 + ldrb w2, [x20,3416] + adrp x1, .LC126 mov x0, x21 - add x1, x1, :lo12:.LC105 + add x1, x1, :lo12:.LC126 bl sprintf add x21, x21, x0, sxtw - ldrh w2, [x22,3924] - adrp x1, .LC106 + ldrh w2, [x20,3412] + adrp x1, .LC127 mov x0, x21 - add x1, x1, :lo12:.LC106 + add x1, x1, :lo12:.LC127 bl sprintf add x21, x21, x0, sxtw ldr w3, [x22,868] - adrp x1, .LC107 + adrp x1, .LC128 ldr w2, [x22,652] - add x1, x1, :lo12:.LC107 - ldr w4, [x22,4052] + add x1, x1, :lo12:.LC128 + ldr w4, [x20,3540] mov x0, x21 - ldr w5, [x22,4044] + ldr w5, [x20,3532] orr w2, w2, w3, lsl 8 - ldr w3, [x22,4048] + ldr w3, [x20,3536] bl sprintf add x19, x21, x0, sxtw - ldr w2, [x22,4040] - adrp x1, .LC108 + ldr w2, [x20,3528] + adrp x1, .LC129 mov x0, x19 - add x1, x1, :lo12:.LC108 + add x1, x1, :lo12:.LC129 bl sprintf add x19, x19, x0, sxtw - ldr w2, [x22,4064] - adrp x1, .LC109 + ldr w2, [x20,3552] + adrp x1, .LC130 mov x0, x19 - add x1, x1, :lo12:.LC109 + add x1, x1, :lo12:.LC130 bl sprintf add x19, x19, x0, sxtw ldrh w2, [x22,952] - adrp x1, .LC110 + adrp x1, .LC131 mov x0, x19 - add x1, x1, :lo12:.LC110 + add x1, x1, :lo12:.LC131 bl sprintf add x19, x19, x0, sxtw ldrh w2, [x22,954] - adrp x1, .LC111 + adrp x1, .LC132 mov x0, x19 - add x1, x1, :lo12:.LC111 + add x1, x1, :lo12:.LC132 bl sprintf add x19, x19, x0, sxtw ldr w2, [x22,940] - adrp x1, .LC112 + adrp x1, .LC133 mov x0, x19 - add x1, x1, :lo12:.LC112 + add x1, x1, :lo12:.LC133 bl sprintf add x19, x19, x0, sxtw ldrh w2, [x22,956] - adrp x1, .LC113 - add x1, x1, :lo12:.LC113 + adrp x1, .LC134 + add x1, x1, :lo12:.LC134 mov x0, x19 bl sprintf add x19, x19, x0, sxtw bl GetFreeBlockMinEraseCount uxth w2, w0 - adrp x1, .LC114 + adrp x1, .LC135 mov x0, x19 - add x1, x1, :lo12:.LC114 + add x1, x1, :lo12:.LC135 bl sprintf add x19, x19, x0, sxtw ldrh w0, [x22,3600] bl GetFreeBlockMaxEraseCount uxth w2, w0 - adrp x1, .LC115 + adrp x1, .LC136 mov x0, x19 - add x1, x1, :lo12:.LC115 + add x1, x1, :lo12:.LC136 bl sprintf add x19, x19, x0, sxtw - ldrh w0, [x22,3920] + ldrh w0, [x20,3408] mov w1, 65535 cmp w0, w1 - beq .L1993 + beq .L2072 ubfiz x2, x0, 1, 16 ldr x3, [x22,1184] - adrp x1, .LC116 + adrp x1, .LC137 mov x0, x19 - add x1, x1, :lo12:.LC116 + add x1, x1, :lo12:.LC137 ldrh w2, [x3,x2] bl sprintf add x19, x19, x0, sxtw -.L1993: +.L2072: mov w0, 0 - adrp x22, .LC117 + adrp x22, .LC138 mov w20, 0 mov w27, 65535 bl List_get_gc_head_node mov w26, 6 uxth w3, w0 - add x22, x22, :lo12:.LC117 -.L1995: + add x22, x22, :lo12:.LC138 +.L2074: cmp w3, w27 - beq .L1994 + beq .L2073 add x21, x24, :lo12:.LANCHOR2 ubfiz x6, x3, 1, 16 umull x25, w3, w26 @@ -13432,14 +14210,14 @@ FtlPrintInfo2buf: ldr x0, [x21,1280] cmp w20, 16 ldrh w3, [x0,x25] - bne .L1995 -.L1994: + bne .L2074 +.L2073: add x1, x24, :lo12:.LANCHOR2 - adrp x22, .LC118 + adrp x22, .LC139 mov w20, 0 mov w27, 65535 mov w26, 6 - add x22, x22, :lo12:.LC118 + add x22, x22, :lo12:.LC139 ldr x0, [x1,3592] ldr x3, [x1,1280] sub x3, x0, x3 @@ -13447,9 +14225,9 @@ FtlPrintInfo2buf: asr x3, x3, 1 madd x3, x0, x3, x3 uxth w3, w3 -.L1997: +.L2076: cmp w3, w27 - beq .L1996 + beq .L2075 add x21, x24, :lo12:.LANCHOR2 ubfiz x5, x3, 1, 16 umull x25, w3, w26 @@ -13467,10 +14245,10 @@ FtlPrintInfo2buf: ldr x0, [x21,1280] cmp w20, 4 ldrh w3, [x0,x25] - bne .L1997 -.L1996: + bne .L2076 +.L2075: sub w0, w19, w23 -.L1992: +.L2071: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -13484,11 +14262,11 @@ FtlPrintInfo2buf: .type ftl_proc_ftl_read, %function ftl_proc_ftl_read: stp x29, x30, [sp, -32]! - adrp x1, .LC45 - adrp x2, .LC119 + adrp x1, .LC47 + adrp x2, .LC140 add x29, sp, 0 - add x1, x1, :lo12:.LC45 - add x2, x2, :lo12:.LC119 + add x1, x1, :lo12:.LC47 + add x2, x2, :lo12:.LC140 stp x19, x20, [sp,16] mov x20, x0 bl sprintf @@ -13514,76 +14292,76 @@ GetSwlReplaceBlock: stp x23, x24, [sp,48] stp x25, x26, [sp,64] adrp x19, .LANCHOR2 - ldr w3, [x1,140] + ldr w3, [x1,3980] add x1, x19, :lo12:.LANCHOR2 ldr w2, [x1,920] cmp w3, w2 - bcs .L2002 + bcs .L2081 str wzr, [x1,904] ldrh w3, [x1,756] ldr x5, [x1,1168] mov x1, 0 -.L2003: +.L2082: cmp w3, w1 - bls .L2035 + bls .L2114 add x4, x19, :lo12:.LANCHOR2 ldrh w6, [x5,x1,lsl 1] add x1, x1, 1 ldr w2, [x4,904] add w2, w6, w2 str w2, [x4,904] - b .L2003 -.L2035: + b .L2082 +.L2114: add x2, x19, :lo12:.LANCHOR2 add x4, x0, :lo12:.LANCHOR4 ldr w1, [x2,904] udiv w3, w1, w3 - str w3, [x4,140] + str w3, [x4,3980] ldr w3, [x2,908] sub w1, w1, w3 ldrh w3, [x2,808] udiv w1, w1, w3 str w1, [x2,904] - b .L2005 -.L2002: + b .L2084 +.L2081: ldr w2, [x1,916] cmp w3, w2 - bls .L2005 + bls .L2084 add w2, w2, 1 str w2, [x1,916] mov w1, 0 -.L2007: +.L2086: add x2, x19, :lo12:.LANCHOR2 ldrh w3, [x2,756] cmp w1, w3 - bcs .L2005 + bcs .L2084 ubfiz x3, x1, 1, 32 ldr x4, [x2,1168] add w1, w1, 1 ldrh w2, [x4,x3] add w2, w2, 1 strh w2, [x4,x3] - b .L2007 -.L2005: + b .L2086 +.L2084: add x1, x19, :lo12:.LANCHOR2 add x0, x0, :lo12:.LANCHOR4 ldr w21, [x1,920] - ldr w23, [x0,140] + ldr w23, [x0,3980] add w0, w21, 256 cmp w0, w23 - bls .L2010 + bls .L2089 ldr w2, [x1,916] add w0, w21, 768 cmp w0, w2 - bls .L2010 + bls .L2089 ldr w0, [x1,652] - cbz w0, .L2013 + cbz w0, .L2092 cmp w21, 30 - bls .L2010 -.L2013: + bls .L2089 +.L2092: mov w0, 65535 - b .L2012 -.L2010: + b .L2091 +.L2089: add x0, x19, :lo12:.LANCHOR2 ldrh w0, [x0,3600] add w0, w0, w0, lsl 1 @@ -13592,13 +14370,13 @@ GetSwlReplaceBlock: uxth w6, w0 add w0, w21, 64 cmp w6, w0 - bcs .L2022 + bcs .L2101 cmp w21, 30 - bhi .L2013 -.L2022: + bhi .L2092 +.L2101: add x1, x19, :lo12:.LANCHOR2 ldr x3, [x1,3568] - cbz x3, .L2013 + cbz x3, .L2092 mov w26, 65535 mov x0, -6148914691236517206 ldrh w9, [x1,756] @@ -13609,16 +14387,16 @@ GetSwlReplaceBlock: add x0, x0, 1 mov w1, 0 mov w10, 6 -.L2015: +.L2094: ldrh w5, [x3] cmp w5, w8 - beq .L2017 + beq .L2096 add w1, w1, 1 uxth w1, w1 cmp w1, w9 - bhi .L2013 + bhi .L2092 ldrh w2, [x3,4] - cbz w2, .L2016 + cbz w2, .L2095 sub x4, x3, x7 asr x4, x4, 1 mul x4, x4, x0 @@ -13626,51 +14404,51 @@ GetSwlReplaceBlock: and x4, x4, 65535 ldrh w2, [x25,x4,lsl 1] cmp w2, w21 - bls .L2021 + bls .L2100 cmp w2, w26 - bcs .L2016 + bcs .L2095 mov w26, w2 mov w20, w3 -.L2016: +.L2095: umull x3, w5, w10 add x3, x7, x3 - b .L2015 -.L2021: + b .L2094 +.L2100: mov w20, w3 -.L2017: +.L2096: mov w0, 65535 cmp w20, w0 - beq .L2013 + beq .L2092 ubfiz x24, x20, 1, 16 ldrh w22, [x25,x24] cmp w22, w21 - bls .L2019 + bls .L2098 str x6, [x29,88] bl GetFreeBlockMinEraseCount ldr x6, [x29,88] cmp w21, w0, uxth - bcs .L2019 + bcs .L2098 add x0, x19, :lo12:.LANCHOR2 str w26, [x0,920] -.L2019: +.L2098: cmp w22, w23 - bcs .L2013 + bcs .L2092 add w0, w22, 128 cmp w6, w0 - ble .L2013 + ble .L2092 add w0, w22, 256 cmp w0, w23 - bcc .L2020 + bcc .L2099 add x0, x19, :lo12:.LANCHOR2 add w22, w22, 768 ldr w0, [x0,916] cmp w22, w0 - bcs .L2013 -.L2020: + bcs .L2092 +.L2099: add x19, x19, :lo12:.LANCHOR2 - adrp x0, .LC120 + adrp x0, .LC141 ldrh w5, [x25,x24] - add x0, x0, :lo12:.LC120 + add x0, x0, :lo12:.LC141 mov w1, w20 mov w2, w23 ldr x4, [x19,1184] @@ -13680,7 +14458,7 @@ GetSwlReplaceBlock: mov w0, 1 str w0, [x19,928] mov w0, w20 -.L2012: +.L2091: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -13697,13 +14475,13 @@ free_data_superblock: mov w1, 65535 cmp w0, w1 add x29, sp, 0 - beq .L2037 + beq .L2116 adrp x2, .LANCHOR2+1184 ubfiz x1, x0, 1, 16 ldr x2, [x2,#:lo12:.LANCHOR2+1184] strh wzr, [x2,x1] bl INSERT_FREE_LIST -.L2037: +.L2116: mov w0, 0 ldp x29, x30, [sp], 16 ret @@ -13722,15 +14500,15 @@ allocate_data_superblock: stp x25, x26, [sp,64] ldr w1, [x19,1400] stp x27, x28, [sp,80] - cbnz w1, .L2039 + cbnz w1, .L2118 mov x20, x0 add x23, x19, 3704 adrp x22, .LANCHOR0 mov w24, 7 add x25, x19, 3592 -.L2040: +.L2119: cmp x20, x23 - bne .L2041 + bne .L2120 ldrh w2, [x19,3600] ldr w4, [x19,928] lsr w3, w2, 1 @@ -13739,43 +14517,43 @@ allocate_data_superblock: add w1, w1, w0, lsr 2 ldr w0, [x19,652] uxth w1, w1 - cbz w0, .L2042 + cbz w0, .L2121 ldr w0, [x19,920] cmp w0, 29 - bhi .L2042 + bhi .L2121 cmp w0, 2 mov w1, 0 - bls .L2043 - tbz x2, 0, .L2070 - cbz w4, .L2043 -.L2070: + bls .L2122 + tbz x2, 0, .L2149 + cbz w4, .L2122 +.L2149: mov w1, w3 - b .L2042 -.L2041: + b .L2121 +.L2120: ldrb w0, [x20,8] mov w1, 0 cmp w0, 1 - bne .L2043 + bne .L2122 ldrh w0, [x19,768] cmp w0, 1 - beq .L2043 + beq .L2122 add x0, x22, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbnz w0, .L2043 + cbnz w0, .L2122 ldr w2, [x19,652] ldrh w0, [x19,3600] lsr w1, w0, 3 - cbz w2, .L2042 + cbz w2, .L2121 ldr w2, [x19,920] cmp w2, 1 - bhi .L2042 + bhi .L2121 mul w1, w0, w24 lsr w1, w1, 3 -.L2042: - cbz w1, .L2043 +.L2121: + cbz w1, .L2122 sub w1, w1, #1 uxth w1, w1 -.L2043: +.L2122: ldrb w2, [x20,8] mov x0, x25 bl List_pop_index_node @@ -13787,20 +14565,20 @@ allocate_data_superblock: mov x0, x20 bl make_superblock ldrb w0, [x20,7] - cbz w0, .L2045 + cbz w0, .L2124 mov x0, 0 ldrh w5, [x19,748] mov w26, w0 mov x3, 56 mov w6, 65535 - b .L2046 -.L2045: + b .L2125 +.L2124: ubfiz x27, x27, 1, 16 ldr x0, [x19,1184] mov w1, -1 strh w1, [x0,x27] - b .L2040 -.L2049: + b .L2119 +.L2128: ldr x4, [x19,1016] madd x1, x0, x3, x4 str xzr, [x1,16] @@ -13808,40 +14586,40 @@ allocate_data_superblock: add x1, x20, x0, lsl 1 ldrh w1, [x1,16] cmp w1, w6 - beq .L2048 + beq .L2127 umull x2, w26, w3 add w26, w26, 1 lsl w1, w1, 10 add x2, x4, x2 uxth w26, w26 str w1, [x2,4] -.L2048: +.L2127: add x0, x0, 1 -.L2046: +.L2125: cmp w5, w0, uxth - bhi .L2049 + bhi .L2128 add x0, x19, 3608 uxtw x28, w27 cmp x20, x0 - bne .L2050 + bne .L2129 ldr w1, [x19,652] - cbz w1, .L2050 + cbz w1, .L2129 ldr x1, [x19,1168] ldrh w1, [x1,x28,lsl 1] cmp w1, 30 - bls .L2050 + bls .L2129 strb wzr, [x19,3616] -.L2050: +.L2129: ldrb w0, [x20,8] - cbnz w0, .L2051 + cbnz w0, .L2130 lsl x0, x28, 1 ldr x1, [x19,1168] mov w2, 2 ldrh w3, [x1,x0] - cbz w3, .L2095 + cbz w3, .L2174 ldrh w2, [x19,808] add w2, w3, w2 -.L2095: +.L2174: strh w2, [x1,x0] mov w1, 0 ldr w0, [x19,904] @@ -13849,8 +14627,8 @@ allocate_data_superblock: str w0, [x19,904] mov w0, w27 bl ftl_set_blk_mode - b .L2054 -.L2051: + b .L2133 +.L2130: lsl x0, x28, 1 ldr x2, [x19,1168] ldrh w1, [x2,x0] @@ -13861,15 +14639,15 @@ allocate_data_superblock: str w0, [x19,908] mov w0, w27 bl ftl_set_blk_mode.part.17 -.L2054: +.L2133: lsl x28, x28, 1 ldr x0, [x19,1168] ldr w1, [x19,916] ldrh w0, [x0,x28] cmp w0, w1 - bls .L2055 + bls .L2134 str w0, [x19,916] -.L2055: +.L2134: ldrh w1, [x19,808] mov x3, 56 ldr w2, [x19,904] @@ -13877,39 +14655,39 @@ allocate_data_superblock: madd w0, w1, w2, w0 ldrh w1, [x19,756] udiv w0, w0, w1 - adrp x1, .LANCHOR4+140 - str w0, [x1,#:lo12:.LANCHOR4+140] + adrp x1, .LANCHOR4+3980 + str w0, [x1,#:lo12:.LANCHOR4+3980] ldr x1, [x19,1160] ldr w0, [x1,16] add w0, w0, 1 str w0, [x1,16] mov x0, 0 -.L2056: +.L2135: cmp w26, w0, uxth - bls .L2097 + bls .L2176 ldr x1, [x19,1016] madd x1, x0, x3, x1 add x0, x0, 1 ldr w2, [x1,4] and w2, w2, -1024 str w2, [x1,4] - b .L2056 -.L2097: + b .L2135 +.L2176: add x0, x22, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L2058 + cbz w0, .L2137 ldrb w0, [x20,8] cmp w0, 1 ldr x0, [x19,1016] - bne .L2059 + bne .L2138 mov w1, 0 - b .L2096 -.L2059: + b .L2175 +.L2138: mov w1, 1 -.L2096: +.L2175: mov w2, w26 bl FlashEraseBlocks -.L2058: +.L2137: ldrb w1, [x20,8] mov w2, w26 ldr x0, [x19,1016] @@ -13917,15 +14695,15 @@ allocate_data_superblock: mov x1, 0 mov x4, 56 mov w2, w1 -.L2060: +.L2139: cmp w26, w1, uxth - bls .L2098 + bls .L2177 mul x0, x1, x4 ldr x3, [x19,1016] add x5, x3, x0 ldr w3, [x3,x0] cmn w3, #1 - bne .L2061 + bne .L2140 ldr w0, [x5,4] add w2, w2, 1 str x4, [x29,104] @@ -13944,22 +14722,22 @@ allocate_data_superblock: ldrb w0, [x20,7] sub w0, w0, #1 strb w0, [x20,7] -.L2061: +.L2140: add x1, x1, 1 - b .L2060 -.L2098: - cbz w2, .L2063 + b .L2139 +.L2177: + cbz w2, .L2142 mov w0, w27 bl update_multiplier_value bl FtlBbmTblFlush -.L2063: +.L2142: ldrb w0, [x20,7] - cbnz w0, .L2064 + cbnz w0, .L2143 ldr x0, [x19,1184] mov w1, -1 strh w1, [x0,x28] - b .L2040 -.L2064: + b .L2119 +.L2143: add x21, x21, :lo12:.LANCHOR2 strh wzr, [x20,2] strb wzr, [x20,6] @@ -13975,7 +14753,7 @@ allocate_data_superblock: ldr x1, [x21,1184] ldrh w2, [x20] strh w0, [x1,x2,lsl 1] -.L2039: +.L2118: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -13989,20 +14767,20 @@ allocate_data_superblock: .global FtlGcBufInit .type FtlGcBufInit, %function FtlGcBufInit: - adrp x0, .LANCHOR4+144 + adrp x0, .LANCHOR4+3984 mov w1, 0 adrp x7, .LANCHOR2 mov w8, 24 mov w9, 1 mov w4, 4 - str wzr, [x0,#:lo12:.LANCHOR4+144] + str wzr, [x0,#:lo12:.LANCHOR4+3984] mov w10, 56 -.L2100: +.L2179: add x2, x7, :lo12:.LANCHOR2 adrp x6, .LANCHOR2 ldrh w0, [x2,748] cmp w1, w0 - bcs .L2104 + bcs .L2183 umull x3, w1, w8 ldr x5, [x2,1104] ldr x6, [x2,1072] @@ -14030,15 +14808,15 @@ FtlGcBufInit: str x2, [x0,8] ldr x2, [x5,8] str x2, [x0,16] - b .L2100 -.L2104: + b .L2179 +.L2183: mov w7, 24 mov w4, 4 -.L2102: +.L2181: add x1, x6, :lo12:.LANCHOR2 ldr w2, [x1,1040] cmp w0, w2 - bcs .L2105 + bcs .L2184 umull x3, w0, w7 ldr x5, [x1,1104] ldr x8, [x1,1072] @@ -14059,8 +14837,8 @@ FtlGcBufInit: uxth w0, w0 add x1, x1, x2, sxtw 2 str x1, [x3,8] - b .L2102 -.L2105: + b .L2181 +.L2184: ret .size FtlGcBufInit, .-FtlGcBufInit .align 2 @@ -14068,23 +14846,23 @@ FtlGcBufInit: .type FtlVariablesInit, %function FtlVariablesInit: stp x29, x30, [sp, -32]! - adrp x0, .LANCHOR4 - mov w1, -1 + mov w0, -1 + mov w1, 0 add x29, sp, 0 - str x19, [sp,16] + stp x19, x20, [sp,16] + adrp x20, .LANCHOR4 adrp x19, .LANCHOR2 add x19, x19, :lo12:.LANCHOR2 - add x0, x0, :lo12:.LANCHOR4 + add x20, x20, :lo12:.LANCHOR4 ldrh w2, [x19,840] - strh w1, [x0,160] - mov w1, -1 - str xzr, [x0,152] + strh w0, [x20,4000] + mov w0, -1 + str w0, [x20,4012] lsl w2, w2, 1 - str w1, [x0,172] - mov w1, 0 - str wzr, [x0,164] - str wzr, [x0,168] ldr x0, [x19,1208] + str xzr, [x20,3992] + str wzr, [x20,4004] + str wzr, [x20,4008] str wzr, [x19,652] strh wzr, [x19,1392] bl ftl_memset @@ -14104,12 +14882,12 @@ FtlVariablesInit: bl ftl_memset mov w1, 0 mov w2, 512 - add x0, x19, 3968 + add x0, x20, 3456 bl ftl_memset bl FtlGcBufInit bl FtlL2PDataInit - ldr x19, [sp,16] mov w0, 0 + ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 ret .size FtlVariablesInit, .-FtlVariablesInit @@ -14124,32 +14902,32 @@ FtlGcBufFree: mov w9, 24 ldr w8, [x2,1040] ldr x5, [x2,1104] -.L2108: +.L2187: cmp w3, w1 - bcs .L2107 + bcs .L2186 umull x4, w3, w7 mov w2, 0 add x4, x0, x4 -.L2113: +.L2192: cmp w2, w8 - bcs .L2110 + bcs .L2189 umull x6, w2, w9 add x10, x5, x6 ldr x11, [x5,x6] ldr x6, [x4,8] cmp x11, x6 - bne .L2109 + bne .L2188 str wzr, [x10,16] - b .L2110 -.L2109: + b .L2189 +.L2188: add w2, w2, 1 uxth w2, w2 - b .L2113 -.L2110: + b .L2192 +.L2189: add w3, w3, 1 uxth w3, w3 - b .L2108 -.L2107: + b .L2187 +.L2186: ret .size FtlGcBufFree, .-FtlGcBufFree .align 2 @@ -14164,17 +14942,17 @@ FtlGcBufAlloc: ldr w5, [x2,1040] ldr x6, [x2,1104] mov w2, 0 -.L2115: +.L2194: cmp w2, w1 - bcs .L2121 + bcs .L2200 mov w3, 0 -.L2119: +.L2198: cmp w3, w5 - bcs .L2117 + bcs .L2196 umull x4, w3, w7 add x4, x6, x4 ldr w10, [x4,16] - cbnz w10, .L2116 + cbnz w10, .L2195 umull x3, w2, w9 str w8, [x4,16] add x3, x0, x3 @@ -14182,41 +14960,41 @@ FtlGcBufAlloc: str x10, [x3,8] ldr x4, [x4,8] str x4, [x3,16] - b .L2117 -.L2116: + b .L2196 +.L2195: add w3, w3, 1 uxth w3, w3 - b .L2119 -.L2117: + b .L2198 +.L2196: add w2, w2, 1 uxth w2, w2 - b .L2115 -.L2121: + b .L2194 +.L2200: ret .size FtlGcBufAlloc, .-FtlGcBufAlloc .align 2 .global IsBlkInGcList .type IsBlkInGcList, %function IsBlkInGcList: - adrp x1, .LANCHOR4+176 + adrp x1, .LANCHOR4+4016 uxth w0, w0 - ldrh w2, [x1,#:lo12:.LANCHOR4+176] + ldrh w2, [x1,#:lo12:.LANCHOR4+4016] adrp x1, .LANCHOR2+976 ldr x3, [x1,#:lo12:.LANCHOR2+976] mov x1, 0 -.L2123: +.L2202: cmp w2, w1, uxth - bls .L2127 + bls .L2206 add x1, x1, 1 add x4, x3, x1, lsl 1 ldrh w4, [x4,-2] cmp w4, w0 - bne .L2123 + bne .L2202 mov w0, 1 - b .L2124 -.L2127: + b .L2203 +.L2206: mov w0, 0 -.L2124: +.L2203: ret .size IsBlkInGcList, .-IsBlkInGcList .align 2 @@ -14237,33 +15015,33 @@ FtlGcUpdatePage: ldr x1, [x29,32] uxth w9, w0 mov x6, 0 - ldrh w8, [x4,176] + ldrh w8, [x4,4016] adrp x4, .LANCHOR2 add x5, x4, :lo12:.LANCHOR2 ldr x7, [x5,976] -.L2129: +.L2208: uxth w5, w6 cmp w5, w8 - bcs .L2133 + bcs .L2212 add x6, x6, 1 add x10, x7, x6, lsl 1 ldrh w10, [x10,-2] cmp w10, w9 - bne .L2129 -.L2133: + bne .L2208 +.L2212: cmp w5, w8 - bne .L2131 + bne .L2210 ubfiz x5, x5, 1, 16 strh w0, [x7,x5] add x0, x3, :lo12:.LANCHOR4 - ldrh w5, [x0,176] + ldrh w5, [x0,4016] add w5, w5, 1 - strh w5, [x0,176] -.L2131: + strh w5, [x0,4016] +.L2210: add x3, x3, :lo12:.LANCHOR4 add x4, x4, :lo12:.LANCHOR2 mov w0, 12 - ldrh w5, [x3,178] + ldrh w5, [x3,4018] ldr x6, [x4,984] umull x5, w5, w0 add x6, x6, x5 @@ -14272,9 +15050,9 @@ FtlGcUpdatePage: add x0, x1, x5 str w2, [x0,8] str w19, [x1,x5] - ldrh w0, [x3,178] + ldrh w0, [x3,4018] add w0, w0, 1 - strh w0, [x3,178] + strh w0, [x3,4018] ldr x19, [sp,16] ldp x29, x30, [sp], 48 ret @@ -14292,8 +15070,8 @@ FtlGcPageVarInit: add x19, x19, :lo12:.LANCHOR2 add x0, x0, :lo12:.LANCHOR4 ldrh w2, [x19,822] - strh wzr, [x0,176] - strh wzr, [x0,178] + strh wzr, [x0,4016] + strh wzr, [x0,4018] lsl w2, w2, 1 ldr x0, [x19,976] bl ftl_memset @@ -14327,49 +15105,49 @@ FtlGcScanTempBlk: ldrh w26, [x0,3068] mov w0, 65535 cmp w26, w0 - beq .L2158 - cbnz w26, .L2137 - b .L2138 -.L2158: + beq .L2237 + cbnz w26, .L2216 + b .L2217 +.L2237: mov w26, 0 -.L2137: +.L2216: adrp x0, .LANCHOR2+818 ldr w1, [x29,152] ldrh w0, [x0,#:lo12:.LANCHOR2+818] cmp w1, w0 - bne .L2139 -.L2138: + bne .L2218 +.L2217: bl FtlGcPageVarInit -.L2139: +.L2218: mov w0, -1 adrp x25, .LANCHOR2 str w0, [x29,156] - adrp x0, .LC121 - add x0, x0, :lo12:.LC121 + adrp x0, .LC142 + add x0, x0, :lo12:.LC142 mov w22, 0 mov w23, 65535 mov x21, x25 mov x24, x25 str x0, [x29,128] -.L2152: +.L2231: ldrh w0, [x19] strb wzr, [x19,8] cmp w0, w23 - beq .L2159 -.L2141: -.L2155: + beq .L2238 +.L2220: +.L2234: add x0, x25, :lo12:.LANCHOR2 mov x2, x19 mov w20, 0 ldrh w5, [x0,748] ldrh w8, [x0,830] add x5, x19, x5, lsl 1 -.L2142: +.L2221: cmp x2, x5 - beq .L2167 + beq .L2246 ldrh w1, [x2,16] cmp w1, w23 - beq .L2143 + beq .L2222 add x6, x21, :lo12:.LANCHOR2 mov w0, 56 orr w1, w26, w1, lsl 10 @@ -14388,19 +15166,19 @@ FtlGcScanTempBlk: sdiv w1, w1, w3 add x1, x6, x1, sxtw 2 str x1, [x0,16] -.L2143: +.L2222: add x2, x2, 2 - b .L2142 -.L2167: + b .L2221 +.L2246: add x0, x21, :lo12:.LANCHOR2 mov w1, w20 mov w2, 0 mov x27, 0 ldr x0, [x0,992] bl FlashReadPages -.L2145: +.L2224: cmp w20, w27, uxth - bls .L2168 + bls .L2247 mov x0, 56 mul x28, x27, x0 add x0, x21, :lo12:.LANCHOR2 @@ -14417,53 +15195,53 @@ FtlGcScanTempBlk: ldr x8, [x29,104] ldr x2, [x29,120] ldr w0, [x8,x28] - cbnz w0, .L2146 + cbnz w0, .L2225 ldr x1, [x29,112] add x27, x27, 1 ldr x5, [x1,16] ldrh w0, [x5] cmp w0, w23 - bne .L2147 - adrp x0, .LANCHOR4+168 + bne .L2226 + adrp x0, .LANCHOR4+4008 mov w1, 1 - str w1, [x0,#:lo12:.LANCHOR4+168] - b .L2140 -.L2147: + str w1, [x0,#:lo12:.LANCHOR4+4008] + b .L2219 +.L2226: mov w1, w2 ldr w0, [x5,12] ldr w2, [x5,8] bl FtlGcUpdatePage - b .L2145 -.L2146: + b .L2224 +.L2225: ldr x0, [x29,128] ldrh w1, [x19] bl printk ldr x0, [x29,144] ldr w0, [x0,652] - cbnz w0, .L2148 + cbnz w0, .L2227 adrp x0, .LANCHOR0+136 ldrb w0, [x0,#:lo12:.LANCHOR0+136] - cbz w0, .L2149 -.L2148: + cbz w0, .L2228 +.L2227: add x0, x24, :lo12:.LANCHOR2 ldrh w1, [x19] ldr x0, [x0,1168] ldrh w0, [x0,x1,lsl 1] cmp w0, 119 - bls .L2150 -.L2149: + bls .L2229 +.L2228: add x0, x24, :lo12:.LANCHOR2 ldr x0, [x0,992] ldr w0, [x0,x28] cmn w0, #1 - bne .L2151 -.L2150: + bne .L2230 +.L2229: add x0, x24, :lo12:.LANCHOR2 ldr x0, [x0,992] add x5, x0, x28 ldr w0, [x5,4] str w0, [x29,156] -.L2151: +.L2230: add x0, x24, :lo12:.LANCHOR2 ldrh w1, [x19] mov w26, 0 @@ -14474,36 +15252,36 @@ FtlGcScanTempBlk: mov w0, -1 strh w0, [x19] bl FtlGcPageVarInit - b .L2152 -.L2168: + b .L2231 +.L2247: ldr w0, [x29,152] add w22, w22, 1 add w3, w26, 1 cmp w22, w0 uxth w26, w3 - bcs .L2154 -.L2156: + bcs .L2233 +.L2235: add x0, x21, :lo12:.LANCHOR2 ldrh w0, [x0,818] cmp w0, w26 - bhi .L2155 - b .L2159 -.L2154: + bhi .L2234 + b .L2238 +.L2233: ldr x0, [x29,136] add x1, x0, :lo12:.LANCHOR1 ldrh w0, [x1,3068] cmp w0, w23 - beq .L2156 + beq .L2235 add w0, w0, w22 strh w0, [x1,3068] add x0, x21, :lo12:.LANCHOR2 ldrh w0, [x0,818] cmp w0, w26 - bls .L2156 - b .L2157 -.L2159: + bls .L2235 + b .L2236 +.L2238: mov w6, 0 -.L2140: +.L2219: ldr x0, [x29,136] mov w1, w26 strh w26, [x19,2] @@ -14514,7 +15292,7 @@ FtlGcScanTempBlk: strh w0, [x20,3068] mov x0, x19 bl ftl_sb_update_avl_pages -.L2157: +.L2236: ldr w0, [x29,156] ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -14532,28 +15310,28 @@ FtlGcRefreshOpenBlock: add x29, sp, 0 str x19, [sp,16] uxth w19, w0 - adrp x0, .LC122 + adrp x0, .LC143 mov w1, w19 - add x0, x0, :lo12:.LC122 + add x0, x0, :lo12:.LC143 bl printk adrp x2, .LANCHOR2 add x2, x2, :lo12:.LANCHOR2 ldrh w3, [x2,948] cmp w3, w19 - beq .L2170 + beq .L2249 ldrh w1, [x2,950] cmp w1, w19 - beq .L2170 + beq .L2249 mov w0, 65535 cmp w3, w0 - bne .L2171 + bne .L2250 strh w19, [x2,948] - b .L2170 -.L2171: + b .L2249 +.L2250: cmp w1, w0 - bne .L2170 + bne .L2249 strh w19, [x2,950] -.L2170: +.L2249: mov w0, 0 ldr x19, [sp,16] ldp x29, x30, [sp], 32 @@ -14567,28 +15345,28 @@ FtlGcRefreshBlock: add x29, sp, 0 str x19, [sp,16] uxth w19, w0 - adrp x0, .LC122 + adrp x0, .LC143 mov w1, w19 - add x0, x0, :lo12:.LC122 + add x0, x0, :lo12:.LC143 bl printk adrp x2, .LANCHOR2 add x2, x2, :lo12:.LANCHOR2 ldrh w3, [x2,948] cmp w3, w19 - beq .L2173 + beq .L2252 ldrh w1, [x2,950] cmp w1, w19 - beq .L2173 + beq .L2252 mov w0, 65535 cmp w3, w0 - bne .L2174 + bne .L2253 strh w19, [x2,948] - b .L2173 -.L2174: + b .L2252 +.L2253: cmp w1, w0 - bne .L2173 + bne .L2252 strh w19, [x2,950] -.L2173: +.L2252: mov w0, 0 ldr x19, [sp,16] ldp x29, x30, [sp], 32 @@ -14610,48 +15388,48 @@ FtlGcMarkBadPhyBlk: bl P2V_block_in_plane uxth w21, w0 ldrh w1, [x22,958] - adrp x0, .LC123 + adrp x0, .LC144 mov w2, w20 - add x0, x0, :lo12:.LC123 + add x0, x0, :lo12:.LC144 bl printk mov w0, w21 bl FtlGcRefreshBlock ldr w0, [x22,652] - cbz w0, .L2176 + cbz w0, .L2255 ubfiz x0, x21, 1, 16 ldr x2, [x22,1168] ldrh w1, [x2,x0] cmp w1, 29 - bls .L2176 + bls .L2255 sub w1, w1, #30 strh w1, [x2,x0] -.L2176: +.L2255: add x0, x19, :lo12:.LANCHOR2 adrp x1, .LANCHOR4 add x1, x1, :lo12:.LANCHOR4 - add x1, x1, 184 + add x1, x1, 4024 ldrh w3, [x0,958] mov x0, 0 -.L2177: +.L2256: cmp w3, w0, uxth - bls .L2183 + bls .L2262 add x0, x0, 1 add x2, x1, x0, lsl 1 ldrh w2, [x2,-2] cmp w2, w20 - bne .L2177 - b .L2178 -.L2183: + bne .L2256 + b .L2257 +.L2262: cmp w3, 15 - bhi .L2178 + bhi .L2257 adrp x1, .LANCHOR4 add x19, x19, :lo12:.LANCHOR2 add x1, x1, :lo12:.LANCHOR4 add w0, w3, 1 - add x1, x1, 184 + add x1, x1, 4024 strh w0, [x19,958] strh w20, [x1,w3,sxtw 1] -.L2178: +.L2257: mov w0, 0 ldr x23, [sp,48] ldp x19, x20, [sp,16] @@ -14669,20 +15447,20 @@ FtlGcReFreshBadBlk: adrp x19, .LANCHOR2 add x0, x19, :lo12:.LANCHOR2 ldrh w1, [x0,958] - cbz w1, .L2185 + cbz w1, .L2264 ldrh w3, [x0,948] mov w2, 65535 cmp w3, w2 - bne .L2185 + bne .L2264 ldrh w2, [x0,962] cmp w2, w1 - bcc .L2186 + bcc .L2265 strh wzr, [x0,962] -.L2186: +.L2265: add x19, x19, :lo12:.LANCHOR2 adrp x0, .LANCHOR4 add x0, x0, :lo12:.LANCHOR4 - add x0, x0, 184 + add x0, x0, 4024 ldrh w1, [x19,962] ldrh w0, [x0,w1,sxtw 1] bl P2V_block_in_plane @@ -14690,7 +15468,7 @@ FtlGcReFreshBadBlk: ldrh w0, [x19,962] add w0, w0, 1 strh w0, [x19,962] -.L2185: +.L2264: mov w0, 0 ldr x19, [sp,16] ldp x29, x30, [sp], 32 @@ -14712,15 +15490,15 @@ FtlGcFreeBadSuperBlk: stp x21, x22, [sp,32] stp x25, x26, [sp,64] mov w21, 0 - cbz w0, .L2192 + cbz w0, .L2271 adrp x24, .LANCHOR4 - adrp x22, .LC124 - add x22, x22, :lo12:.LC124 + adrp x22, .LC145 + add x22, x22, :lo12:.LC145 add x25, x24, :lo12:.LANCHOR4 -.L2200: +.L2279: ldrh w0, [x19,748] cmp w0, w21 - bls .L2201 + bls .L2280 add x0, x19, 776 mov w1, w23 mov w20, 0 @@ -14728,14 +15506,14 @@ FtlGcFreeBadSuperBlk: ldrb w0, [x0,w21,sxtw] bl V2P_block uxth w26, w0 -.L2193: +.L2272: ldrh w0, [x19,958] cmp w0, w20 - bls .L2202 - add x0, x27, 184 + bls .L2281 + add x0, x27, 4024 ldrh w0, [x0,w20,sxtw 1] cmp w0, w26 - bne .L2194 + bne .L2273 mov w1, w26 mov x0, x22 bl printk @@ -14744,29 +15522,29 @@ FtlGcFreeBadSuperBlk: bl FtlBbmTblFlush ldrh w2, [x19,958] mov w3, w20 -.L2195: +.L2274: cmp w3, w2 - bcs .L2203 - add x4, x25, 184 + bcs .L2282 + add x4, x25, 4024 add w0, w3, 1 ldrh w1, [x4,w0,sxtw 1] strh w1, [x4,w3,sxtw 1] uxth w3, w0 - b .L2195 -.L2203: + b .L2274 +.L2282: sub w2, w2, #1 strh w2, [x19,958] -.L2194: +.L2273: add w20, w20, 1 uxth w20, w20 - b .L2193 -.L2202: + b .L2272 +.L2281: add w21, w21, 1 uxth w21, w21 - b .L2200 -.L2201: + b .L2279 +.L2280: bl FtlGcReFreshBadBlk -.L2192: +.L2271: mov w0, 0 ldr x27, [sp,80] ldp x19, x20, [sp,16] @@ -14785,29 +15563,31 @@ update_vpc_list: stp x19, x20, [sp,16] adrp x20, .LANCHOR2 uxth w19, w0 - add x1, x20, :lo12:.LANCHOR2 + add x2, x20, :lo12:.LANCHOR2 ubfiz x0, x19, 1, 16 - ldr x2, [x1,1184] - ldrh w2, [x2,x0] - cbnz w2, .L2205 - ldrh w0, [x1,3920] - cmp w0, w19 - bne .L2206 - mov w0, -1 - strh w0, [x1,3920] - b .L2207 -.L2206: - ldrh w3, [x1,3608] - mov w0, w2 + ldr x1, [x2,1184] + ldrh w1, [x1,x0] + cbnz w1, .L2284 + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + ldrh w3, [x0,3408] + cmp w3, w19 + bne .L2285 + mov w1, -1 + strh w1, [x0,3408] + b .L2286 +.L2285: + ldrh w3, [x2,3608] + mov w0, w1 cmp w3, w19 - beq .L2208 - ldrh w3, [x1,3656] + beq .L2287 + ldrh w3, [x2,3656] cmp w3, w19 - beq .L2208 - ldrh w1, [x1,3704] - cmp w1, w19 - beq .L2208 -.L2207: + beq .L2287 + ldrh w2, [x2,3704] + cmp w2, w19 + beq .L2287 +.L2286: add x20, x20, :lo12:.LANCHOR2 mov w1, w19 add x0, x20, 3568 @@ -14820,12 +15600,12 @@ update_vpc_list: mov w0, w19 bl FtlGcFreeBadSuperBlk mov w0, 1 - b .L2208 -.L2205: + b .L2287 +.L2284: mov w0, w19 bl List_update_data_list mov w0, 0 -.L2208: +.L2287: ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 ret @@ -14840,43 +15620,43 @@ decrement_vpc_count: add x29, sp, 0 str x19, [sp,16] cmp w1, w0 - beq .L2213 + beq .L2292 adrp x2, .LANCHOR2+1184 ubfiz x0, x1, 1, 16 ldr x2, [x2,#:lo12:.LANCHOR2+1184] ldrh w19, [x2,x0] - cbnz w19, .L2214 - adrp x0, .LC125 + cbnz w19, .L2293 + adrp x0, .LC146 mov w2, w19 - add x0, x0, :lo12:.LC125 + add x0, x0, :lo12:.LC146 bl printk - b .L2218 -.L2214: + b .L2297 +.L2293: sub w19, w19, #1 strh w19, [x2,x0] -.L2213: +.L2292: adrp x19, .LANCHOR4 mov w0, 65535 add x19, x19, :lo12:.LANCHOR4 - ldrh w2, [x19,160] + ldrh w2, [x19,4000] cmp w2, w0 - bne .L2216 - strh w1, [x19,160] -.L2218: + bne .L2295 + strh w1, [x19,4000] +.L2297: mov w0, 0 - b .L2215 -.L2216: + b .L2294 +.L2295: cmp w2, w1 str x1, [x29,40] mov w0, 0 - beq .L2215 + beq .L2294 mov w0, w2 bl update_vpc_list cmp w0, wzr ldr x1, [x29,40] cset w0, ne - strh w1, [x19,160] -.L2215: + strh w1, [x19,4000] +.L2294: ldr x19, [sp,16] ldp x29, x30, [sp], 48 ret @@ -14896,7 +15676,7 @@ FtlRecoverySuperblock: mov x19, x0 ldrh w0, [x0] cmp w0, w2 - beq .L2377 + beq .L2456 ldrh w0, [x19,2] adrp x20, .LANCHOR2 str w0, [x29,188] @@ -14905,44 +15685,44 @@ FtlRecoverySuperblock: ldr w1, [x29,188] ldrh w0, [x0,818] cmp w0, w1 - bne .L2222 + bne .L2301 strh wzr, [x19,4] - b .L2383 -.L2222: + b .L2462 +.L2301: ldrh w0, [x19,16] mov w1, 0 -.L2223: +.L2302: cmp w0, w2 - bne .L2386 + bne .L2465 add w1, w1, 1 uxth w1, w1 add x0, x19, x1, sxtw 1 ldrh w0, [x0,16] - b .L2223 -.L2386: + b .L2302 +.L2465: ldrb w1, [x19,8] cmp w1, 1 - bne .L2225 + bne .L2304 bl FtlGetLastWrittenPage cmn w0, #1 mov w21, w0 - beq .L2226 + beq .L2305 adrp x0, .LANCHOR0 mov w23, w21 add x0, x0, :lo12:.LANCHOR0 ldrb w1, [x0,136] - cbnz w1, .L2300 + cbnz w1, .L2379 add x0, x0, 140 ldrh w23, [x0,w21,sxtw 1] - b .L2300 -.L2225: + b .L2379 +.L2304: mov w1, 0 bl FtlGetLastWrittenPage cmn w0, #1 mov w21, w0 - beq .L2226 + beq .L2305 mov w23, w0 -.L2300: +.L2379: add x0, x20, :lo12:.LANCHOR2 mov x2, x19 mov w25, 0 @@ -14952,16 +15732,16 @@ FtlRecoverySuperblock: ldrh w4, [x0,748] ldrh w7, [x0,830] add x4, x19, x4, lsl 1 - b .L2228 -.L2226: + b .L2307 +.L2305: strh wzr, [x19,2] -.L2383: +.L2462: strb wzr, [x19,6] - b .L2377 -.L2230: + b .L2456 +.L2309: ldrh w1, [x2,16] cmp w1, w8 - beq .L2229 + beq .L2308 add x5, x20, :lo12:.LANCHOR2 orr w1, w23, w1, lsl 10 umull x0, w25, w9 @@ -14978,21 +15758,21 @@ FtlRecoverySuperblock: sdiv w1, w1, w10 add x1, x5, x1, sxtw 2 str x1, [x0,16] -.L2229: +.L2308: add x2, x2, 2 -.L2228: +.L2307: cmp x2, x4 - bne .L2230 + bne .L2309 ldrb w0, [x19,8] str wzr, [x29,184] cmp w0, 1 - bne .L2231 + bne .L2310 adrp x0, .LANCHOR0+136 ldrb w0, [x0,#:lo12:.LANCHOR0+136] cmp w0, wzr cset w0, ne str w0, [x29,184] -.L2231: +.L2310: add x22, x20, :lo12:.LANCHOR2 ldr w2, [x29,184] mov w1, w25 @@ -15002,26 +15782,26 @@ FtlRecoverySuperblock: ldr x0, [x22,992] bl FlashReadPages ldr w0, [x22,876] - adrp x22, .LC126 + adrp x22, .LC147 str w0, [x29,176] - add x22, x22, :lo12:.LC126 + add x22, x22, :lo12:.LC147 uxth w0, w23 str w0, [x29,168] -.L2232: +.L2311: uxth w2, w26 cmp w2, w25 - bcs .L2239 + bcs .L2318 add x6, x20, :lo12:.LANCHOR2 mov x0, 56 mul x0, x26, x0 ldr x4, [x6,992] add x1, x4, x0 ldr w0, [x4,x0] - cbnz w0, .L2233 + cbnz w0, .L2312 ldr x7, [x1,16] ldr w4, [x7,4] cmn w4, #1 - beq .L2234 + beq .L2313 ldr w1, [x6,876] mov w0, w4 str x7, [x29,136] @@ -15033,34 +15813,34 @@ FtlRecoverySuperblock: ldr x4, [x29,152] ldr x2, [x29,144] ldr x7, [x29,136] - cbz w0, .L2234 + cbz w0, .L2313 add w4, w4, 1 str w4, [x6,876] -.L2234: +.L2313: ldr w0, [x7] cmn w0, #1 - bne .L2235 -.L2239: + bne .L2314 +.L2318: cmp w2, w25 - bne .L2378 + bne .L2457 add x0, x20, :lo12:.LANCHOR2 add w21, w21, 1 uxth w21, w21 ldr x0, [x0,992] ldr w0, [x0,4] - b .L2379 -.L2233: + b .L2458 +.L2312: ldr w1, [x1,4] mov x0, x22 bl printk ldr w24, [x29,168] add x0, x27, :lo12:.LANCHOR4 ldrh w1, [x19] - strh w1, [x0,218] -.L2235: + strh w1, [x0,4058] +.L2314: add x26, x26, 1 - b .L2232 -.L2378: + b .L2311 +.L2457: add x0, x20, :lo12:.LANCHOR2 mov w1, 56 uxth w21, w21 @@ -15068,83 +15848,83 @@ FtlRecoverySuperblock: ldr x0, [x0,992] add x2, x0, x2 ldr w0, [x2,4] -.L2379: +.L2458: lsr x0, x0, 10 bl P2V_plane uxth w26, w0 ldrb w1, [x19,8] cmp w1, 1 - bne .L2241 + bne .L2320 adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 ldrb w2, [x0,136] - cbnz w2, .L2241 + cbnz w2, .L2320 add x0, x0, 140 ldrh w21, [x0,w21,sxtw 1] -.L2241: +.L2320: add x0, x20, :lo12:.LANCHOR2 ldrh w0, [x0,818] cmp w0, w21 - bne .L2242 + bne .L2321 strh w21, [x19,2] strb wzr, [x19,6] strh wzr, [x19,4] -.L2242: +.L2321: uxth w0, w28 str w0, [x29,152] ldr w0, [x29,188] cmp w21, w0 - bne .L2243 + bne .L2322 ldr w0, [x29,152] cmp w26, w0 - beq .L2384 -.L2243: + beq .L2463 +.L2322: ldr w0, [x29,176] adrp x25, .LANCHOR4 sub w22, w0, #1 mov w0, 65535 cmp w24, w0 - bne .L2244 - cbnz w1, .L2245 -.L2244: + bne .L2323 + cbnz w1, .L2324 +.L2323: add x0, x25, :lo12:.LANCHOR4 uxth w6, w23 - ldr w1, [x0,172] + ldr w1, [x0,4012] cmn w1, #1 - bne .L2246 - str w22, [x0,172] -.L2246: + bne .L2325 + str w22, [x0,4012] +.L2325: add x0, x25, :lo12:.LANCHOR4 ldr w24, [x29,188] - ldr w3, [x0,172] + ldr w3, [x0,4012] ldr w0, [x29,188] add w0, w0, 7 cmp w0, w23, uxth - bge .L2247 + bge .L2326 sub w24, w6, #7 uxth w24, w24 -.L2247: +.L2326: adrp x7, .LANCHOR0 mov w28, -1 add x5, x7, :lo12:.LANCHOR0 mov w27, w28 mov w4, 65535 add x5, x5, 652 -.L2248: +.L2327: cmp w24, w6 - bhi .L2261 + bhi .L2340 add x0, x20, :lo12:.LANCHOR2 mov w23, 0 mov w10, 56 ldrh w2, [x0,748] mov x0, x19 add x2, x19, x2, lsl 1 -.L2262: +.L2341: cmp x0, x2 - beq .L2387 + beq .L2466 ldrh w1, [x0,16] cmp w1, w4 - beq .L2249 + beq .L2328 add x9, x20, :lo12:.LANCHOR2 orr w1, w24, w1, lsl 10 umull x8, w23, w10 @@ -15153,10 +15933,10 @@ FtlRecoverySuperblock: uxth w23, w23 add x8, x9, x8 str w1, [x8,4] -.L2249: +.L2328: add x0, x0, 2 - b .L2262 -.L2387: + b .L2341 +.L2466: add x8, x20, :lo12:.LANCHOR2 ldr w2, [x29,184] mov w1, w23 @@ -15180,99 +15960,99 @@ FtlRecoverySuperblock: ldr x0, [x8,992] ldr x5, [x29,128] add x0, x0, 16 -.L2251: +.L2330: cmp w1, w23 - beq .L2388 + beq .L2467 ldr w2, [x0,-16] - cbnz w2, .L2252 + cbnz w2, .L2331 ldr x2, [x0] ldrh w8, [x2] cmp w8, w4 - beq .L2253 + beq .L2332 ldr w8, [x2,4] cmn w8, #1 - beq .L2253 + beq .L2332 add x2, x25, :lo12:.LANCHOR4 cmn w28, #1 - ldr w27, [x2,172] - str w8, [x2,172] - bne .L2253 + ldr w27, [x2,4012] + str w8, [x2,4012] + bne .L2332 ldrh w2, [x5,x10,lsl 1] cmp w2, w4 - bne .L2254 - cbz w9, .L2253 -.L2254: + bne .L2333 + cbz w9, .L2332 +.L2333: cmp w27, w22 csinv w28, w27, wzr, ne - b .L2253 -.L2252: + b .L2332 +.L2331: add x0, x25, :lo12:.LANCHOR4 ldrh w1, [x19] - strh w1, [x0,218] + strh w1, [x0,4058] ldrb w1, [x19,8] - cbnz w1, .L2245 + cbnz w1, .L2324 adrp x1, .LANCHOR0 add x1, x1, :lo12:.LANCHOR0 add x1, x1, 652 ldrh w2, [x1,w24,sxtw 1] mov w1, 65535 cmp w2, w1 - bne .L2256 + bne .L2335 cmn w28, #1 - beq .L2257 - str w28, [x0,172] - b .L2245 -.L2257: + beq .L2336 + str w28, [x0,4012] + b .L2324 +.L2336: cmp w3, w22 - beq .L2258 - str w3, [x0,172] - b .L2245 -.L2258: - ldr w1, [x0,172] - b .L2385 -.L2256: + beq .L2337 + str w3, [x0,4012] + b .L2324 +.L2337: + ldr w1, [x0,4012] + b .L2464 +.L2335: cmp w27, w22 - beq .L2259 + beq .L2338 cmn w27, #1 - beq .L2245 - str w27, [x0,172] - b .L2245 -.L2259: - ldr w1, [x0,172] + beq .L2324 + str w27, [x0,4012] + b .L2324 +.L2338: + ldr w1, [x0,4012] cmp w1, w22 - beq .L2245 -.L2385: + beq .L2324 +.L2464: sub w1, w1, #1 - b .L2380 -.L2253: + b .L2459 +.L2332: add w1, w1, 1 add x0, x0, 56 uxth w1, w1 - b .L2251 -.L2388: + b .L2330 +.L2467: add w24, w24, 1 uxth w24, w24 - b .L2248 -.L2261: + b .L2327 +.L2340: add x0, x25, :lo12:.LANCHOR4 mov w1, -1 -.L2380: - str w1, [x0,172] -.L2245: +.L2459: + str w1, [x0,4012] +.L2324: add x0, x25, :lo12:.LANCHOR4 mov w1, 1 - strh w1, [x0,220] + strh w1, [x0,4060] add x0, x20, :lo12:.LANCHOR2 add x0, x0, 3752 bl FtlMapBlkWriteDumpData ldr w23, [x29,188] - adrp x0, .LC128 - add x0, x0, :lo12:.LC128 + adrp x0, .LC149 + add x0, x0, :lo12:.LC149 str x0, [x29,128] - adrp x0, .LC127 - add x0, x0, :lo12:.LC127 + adrp x0, .LC148 + add x0, x0, :lo12:.LC148 str x0, [x29,120] -.L2263: +.L2342: add x0, x20, :lo12:.LANCHOR2 adrp x1, .LANCHOR0 add x1, x1, :lo12:.LANCHOR0 @@ -15283,12 +16063,12 @@ FtlRecoverySuperblock: ldrb w6, [x1,136] mov x1, x19 add x3, x19, x3, lsl 1 -.L2264: +.L2343: cmp x1, x3 - beq .L2389 + beq .L2468 ldrh w2, [x1,16] cmp w2, w7 - beq .L2265 + beq .L2344 ldr w0, [x29,176] add x5, x20, :lo12:.LANCHOR2 orr w2, w23, w2, lsl 10 @@ -15298,33 +16078,33 @@ FtlRecoverySuperblock: str w2, [x4,4] ldrb w2, [x19,8] cmp w2, 1 - bne .L2266 - cbz w6, .L2266 + bne .L2345 + cbz w6, .L2345 ldr x2, [x5,992] add x0, x2, x0 ldr w2, [x0,4] orr w2, w2, -2147483648 str w2, [x0,4] -.L2266: +.L2345: ldr w0, [x29,176] add w0, w0, 1 uxth w0, w0 str w0, [x29,176] -.L2265: +.L2344: add x1, x1, 2 - b .L2264 -.L2389: + b .L2343 +.L2468: add x0, x20, :lo12:.LANCHOR2 ldr w1, [x29,176] ldr w2, [x29,184] ldr x0, [x0,992] bl FlashReadPages str xzr, [x29,160] -.L2268: +.L2347: ldrh w0, [x29,160] ldr w1, [x29,176] cmp w1, w0, uxth - bls .L2390 + bls .L2469 ldr x0, [x29,160] mov x24, 56 mul x24, x0, x24 @@ -15340,38 +16120,38 @@ FtlRecoverySuperblock: ldr w1, [x29,188] cmp w23, w1 ldr x1, [x29,168] - bcc .L2269 + bcc .L2348 ldr w2, [x29,152] cmp w0, w2 - bcs .L2304 + bcs .L2383 ldr w2, [x29,188] cmp w23, w2 - beq .L2269 -.L2304: + beq .L2348 +.L2383: cmp w0, w26 - bne .L2305 + bne .L2384 cmp w23, w21 - beq .L2271 -.L2305: + beq .L2350 +.L2384: ldr w0, [x28,x24] cmn w0, #1 - beq .L2273 + beq .L2352 ldr x28, [x27,16] mov w0, 61589 ldrh w1, [x28] cmp w1, w0 - bne .L2280 + bne .L2359 ldr w22, [x28,4] cmn w22, #1 - beq .L2275 + beq .L2354 add x27, x20, :lo12:.LANCHOR2 mov w0, w22 ldr w1, [x27,876] bl ftl_cmp_data_ver - cbz w0, .L2275 + cbz w0, .L2354 add w0, w22, 1 str w0, [x27,876] -.L2275: +.L2354: ldr w27, [x28,8] add x1, x29, 200 ldr w0, [x28,12] @@ -15381,15 +16161,15 @@ FtlRecoverySuperblock: bl log2phys add x0, x25, :lo12:.LANCHOR4 str x0, [x29,136] - ldr w1, [x0,172] + ldr w1, [x0,4012] cmn w1, #1 - beq .L2276 + beq .L2355 mov w0, w22 bl ftl_cmp_data_ver - cbz w0, .L2276 + cbz w0, .L2355 ldr w1, [x29,196] cmn w1, #1 - beq .L2277 + beq .L2356 add x3, x20, :lo12:.LANCHOR2 str x3, [x29,112] ldr x0, [x3,992] @@ -15410,45 +16190,45 @@ FtlRecoverySuperblock: add x4, x2, x24 ldr w0, [x2,x24] cmn w0, #1 - bne .L2278 - b .L2279 -.L2277: + bne .L2357 + b .L2358 +.L2356: ldr w0, [x29,204] ldr w1, [x29,200] cmp w1, w0 - bne .L2280 + bne .L2359 mov w0, w27 add x1, x29, 196 mov w2, 1 bl log2phys -.L2280: +.L2359: ldrh w0, [x19] - b .L2382 -.L2278: + b .L2461 +.L2357: ldr x0, [x29,168] ldr w28, [x0,8] cmp w28, w27 - bne .L2279 + bne .L2358 ldr x0, [x29,136] ldr w1, [x29,144] str x2, [x29,96] - ldr w0, [x0,172] + ldr w0, [x0,4012] str x3, [x29,104] str x4, [x29,112] bl ftl_cmp_data_ver ldr x4, [x29,112] ldr x3, [x29,104] ldr x2, [x29,96] - cbz w0, .L2279 + cbz w0, .L2358 ldr w0, [x29,200] ldr w1, [x29,204] cmp w0, w1 - beq .L2285 + beq .L2364 ldr w1, [x29,196] cmp w0, w1 - beq .L2279 + beq .L2358 cmn w0, #1 - beq .L2283 + beq .L2362 str w0, [x4,4] mov w2, 0 ldr x1, [x4,16] @@ -15457,65 +16237,65 @@ FtlRecoverySuperblock: mov w1, 1 add x0, x0, x24 bl FlashReadPages - b .L2284 -.L2283: + b .L2363 +.L2362: str w0, [x2,x24] -.L2284: +.L2363: adrp x0, .LANCHOR2+992 ldr x0, [x0,#:lo12:.LANCHOR2+992] ldr w0, [x0,x24] cmn w0, #1 - beq .L2285 + beq .L2364 ldr x0, [x29,168] ldr w24, [x0,4] add x0, x25, :lo12:.LANCHOR4 mov w1, w24 - ldr w0, [x0,172] + ldr w0, [x0,4012] bl ftl_cmp_data_ver - cbz w0, .L2285 + cbz w0, .L2364 ldr w0, [x29,144] mov w1, w24 bl ftl_cmp_data_ver - cbz w0, .L2279 -.L2285: + cbz w0, .L2358 +.L2364: ldr w1, [x29,196] mov w0, w28 bl FtlReUsePrevPpa -.L2279: +.L2358: mov w0, -1 str w0, [x29,196] ldrh w0, [x19] bl decrement_vpc_count - b .L2287 -.L2276: + b .L2366 +.L2355: ldr w0, [x29,204] ldr w1, [x29,200] cmp w1, w0 - beq .L2287 + beq .L2366 mov w0, w27 add x1, x29, 204 mov w2, 1 bl log2phys ldr w24, [x29,200] cmn w24, #1 - beq .L2287 + beq .L2366 ldr w0, [x29,196] cmp w24, w0 - beq .L2287 + beq .L2366 lsr x0, x24, 10 bl P2V_block_in_plane uxth w0, w0 add x1, x20, :lo12:.LANCHOR2 ldrh w2, [x1,3608] cmp w2, w0 - beq .L2290 + beq .L2369 ldrh w2, [x1,3656] cmp w2, w0 - beq .L2290 + beq .L2369 ldrh w1, [x1,3704] cmp w1, w0 - bne .L2287 -.L2290: + bne .L2366 +.L2369: add x28, x20, :lo12:.LANCHOR2 mov w1, 1 mov w2, 0 @@ -15530,18 +16310,18 @@ FtlRecoverySuperblock: ldr w0, [x0] ldr w1, [x3,4] cmn w0, #1 - beq .L2287 + beq .L2366 mov w0, w22 bl ftl_cmp_data_ver - cbnz w0, .L2287 + cbnz w0, .L2366 mov w0, w27 add x1, x29, 200 mov w2, 1 bl log2phys -.L2287: +.L2366: ldr w0, [x29,196] cmn w0, #1 - beq .L2269 + beq .L2348 lsr x0, x0, 10 bl P2V_block_in_plane uxth w1, w0 @@ -15549,91 +16329,91 @@ FtlRecoverySuperblock: ubfiz x3, x1, 1, 16 ldr x2, [x2,1184] ldrh w2, [x2,x3] - cbz w2, .L2291 -.L2382: + cbz w2, .L2370 +.L2461: bl decrement_vpc_count - b .L2269 -.L2291: + b .L2348 +.L2370: ldr x0, [x29,120] bl printk - b .L2269 -.L2273: + b .L2348 +.L2352: add x24, x25, :lo12:.LANCHOR4 ldrh w0, [x19] mov w2, w22 - strh w0, [x24,218] + strh w0, [x24,4058] ldr x0, [x29,128] bl printk - ldr w0, [x24,224] + ldr w0, [x24,4064] cmp w0, 31 - bhi .L2292 - add x1, x24, 232 + bhi .L2371 + add x1, x24, 4072 ldr w2, [x29,204] str w2, [x1,w0,uxtw 2] add w0, w0, 1 - str w0, [x24,224] -.L2292: + str w0, [x24,4064] +.L2371: ldrh w0, [x19] bl decrement_vpc_count add x0, x25, :lo12:.LANCHOR4 - ldr w1, [x0,172] + ldr w1, [x0,4012] cmn w1, #1 - beq .L2381 + beq .L2460 cmp w1, w22 - bls .L2269 -.L2381: - str w22, [x0,172] -.L2269: + bls .L2348 +.L2460: + str w22, [x0,4012] +.L2348: ldr x0, [x29,160] add x0, x0, 1 str x0, [x29,160] - b .L2268 -.L2390: + b .L2347 +.L2469: ldrb w0, [x19,8] add w23, w23, 1 cmp w0, 1 uxth w23, w23 - bne .L2295 + bne .L2374 adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L2295 + cbz w0, .L2374 cmp w21, w23 - bne .L2295 + bne .L2374 add x0, x20, :lo12:.LANCHOR2 ldrh w0, [x0,820] cmp w0, w23 - beq .L2271 -.L2295: + beq .L2350 +.L2374: add x0, x20, :lo12:.LANCHOR2 ldrh w1, [x0,818] cmp w23, w1 - bne .L2263 + bne .L2342 ldrh w2, [x0,748] mov w3, 65535 strh w23, [x19,2] mov x0, 0 strh wzr, [x19,4] -.L2297: +.L2376: uxth w1, w0 cmp w1, w2 - bcs .L2377 + bcs .L2456 add x0, x0, 1 add x4, x19, x0, lsl 1 ldrh w4, [x4,14] cmp w4, w3 - beq .L2297 + beq .L2376 strb w1, [x19,6] - b .L2377 -.L2271: + b .L2456 +.L2350: strb w26, [x19,6] strh w21, [x19,2] -.L2384: +.L2463: mov x0, x19 mov w1, w21 mov w2, w26 bl ftl_sb_update_avl_pages -.L2377: +.L2456: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -15653,11 +16433,11 @@ FtlSlcSuperblockCheck: stp x21, x22, [sp,32] str x23, [sp,48] ldrh w1, [x0,4] - cbz w1, .L2391 + cbz w1, .L2470 ldrh w1, [x0] mov w20, 65535 cmp w1, w20 - beq .L2391 + beq .L2470 mov x19, x0 ldrb w0, [x0,6] adrp x21, .LANCHOR0 @@ -15666,10 +16446,10 @@ FtlSlcSuperblockCheck: add x21, x21, :lo12:.LANCHOR0 add x22, x21, 652 ldrh w0, [x19,x0,lsl 1] -.L2395: +.L2474: cmp w0, w20 - bne .L2402 -.L2397: + bne .L2481 +.L2476: ldrb w0, [x19,6] add x1, x23, :lo12:.LANCHOR2 add w0, w0, 1 @@ -15677,51 +16457,51 @@ FtlSlcSuperblockCheck: uxtb w0, w0 strb w0, [x19,6] cmp w1, w0 - bne .L2396 + bne .L2475 ldrh w0, [x19,2] strb wzr, [x19,6] add w0, w0, 1 strh w0, [x19,2] -.L2396: +.L2475: ldrb w0, [x19,6] add x0, x0, 8 ldrh w0, [x19,x0,lsl 1] - b .L2395 -.L2402: + b .L2474 +.L2481: ldrb w1, [x19,8] cmp w1, 1 - bne .L2398 + bne .L2477 ldrb w0, [x21,136] - cbnz w0, .L2398 + cbnz w0, .L2477 ldrh w0, [x19,2] ldrh w0, [x22,w0,sxtw 1] cmp w0, w20 - bne .L2398 + bne .L2477 ldrh w0, [x19,4] sub w0, w0, #1 strh w0, [x19,4] ldrh w0, [x19] bl decrement_vpc_count ldrh w1, [x19,4] - cbnz w1, .L2397 + cbnz w1, .L2476 ldrh w0, [x19,2] strb w1, [x19,6] add w0, w0, 1 strh w0, [x19,2] - b .L2391 -.L2398: + b .L2470 +.L2477: adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L2391 + cbz w0, .L2470 cmp w1, 1 - bne .L2391 + bne .L2470 adrp x0, .LANCHOR2 ldrh w2, [x19,2] add x0, x0, :lo12:.LANCHOR2 ldrh w1, [x0,820] cmp w2, w1 - bcc .L2391 + bcc .L2470 ldrh w1, [x19] ldr x3, [x0,1184] lsl x1, x1, 1 @@ -15733,7 +16513,7 @@ FtlSlcSuperblockCheck: ldrh w0, [x0,818] strh w0, [x19,2] strb wzr, [x19,6] -.L2391: +.L2470: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldr x23, [sp,48] @@ -15760,11 +16540,11 @@ get_new_active_ppa: add x0, x0, 8 add x24, x20, 652 ldrh w0, [x19,x0,lsl 1] -.L2404: +.L2483: cmp w0, w22 adrp x21, .LANCHOR2 - bne .L2419 -.L2405: + bne .L2498 +.L2484: ldrb w0, [x19,6] add x1, x23, :lo12:.LANCHOR2 add w0, w0, 1 @@ -15772,33 +16552,33 @@ get_new_active_ppa: uxtb w0, w0 strb w0, [x19,6] cmp w1, w0 - bne .L2406 + bne .L2485 ldrh w0, [x19,2] strb wzr, [x19,6] add w0, w0, 1 strh w0, [x19,2] -.L2406: +.L2485: ldrb w0, [x19,6] add x0, x0, 8 ldrh w0, [x19,x0,lsl 1] - b .L2404 -.L2419: + b .L2483 +.L2498: ldrb w1, [x19,8] cmp w1, 1 - bne .L2407 + bne .L2486 ldrb w1, [x20,136] - cbnz w1, .L2407 + cbnz w1, .L2486 ldrh w1, [x19,2] ldrh w1, [x24,w1,sxtw 1] cmp w1, w22 - bne .L2407 + bne .L2486 ldrh w0, [x19,4] sub w0, w0, #1 strh w0, [x19,4] ldrh w0, [x19] bl decrement_vpc_count - b .L2405 -.L2407: + b .L2484 +.L2486: ldrh w1, [x19,4] adrp x20, .LANCHOR0 ldrh w22, [x19,2] @@ -15809,51 +16589,51 @@ get_new_active_ppa: strh w1, [x19,4] mov w24, w23 add x25, x20, 652 -.L2408: +.L2487: add x0, x21, :lo12:.LANCHOR2 ldrb w1, [x19,6] ldrh w2, [x0,748] -.L2410: +.L2489: add w1, w1, 1 uxtb w1, w1 cmp w1, w2 - bne .L2409 + bne .L2488 ldrh w1, [x19,2] add w1, w1, 1 strh w1, [x19,2] mov w1, 0 -.L2409: +.L2488: add x0, x19, x1, sxtw 1 ldrh w0, [x0,16] cmp w0, w23 - beq .L2410 + beq .L2489 ldrb w0, [x19,8] strb w1, [x19,6] cmp w0, 1 - bne .L2415 + bne .L2494 ldrb w0, [x20,136] - cbnz w0, .L2412 + cbnz w0, .L2491 ldrh w0, [x19,2] ldrh w0, [x25,w0,sxtw 1] cmp w0, w24 - bne .L2412 + bne .L2491 ldrh w1, [x19,4] - cbz w1, .L2412 + cbz w1, .L2491 ldrh w0, [x19] sub w1, w1, #1 strh w1, [x19,4] bl decrement_vpc_count - b .L2408 -.L2412: + b .L2487 +.L2491: adrp x1, .LANCHOR0 add x1, x1, :lo12:.LANCHOR0 ldrb w0, [x1,136] - cbz w0, .L2415 + cbz w0, .L2494 add x2, x21, :lo12:.LANCHOR2 ldrh w1, [x19,2] ldrh w0, [x2,820] cmp w1, w0 - bcc .L2415 + bcc .L2494 ldrh w1, [x19] ldr x0, [x2,1184] lsl x1, x1, 1 @@ -15865,7 +16645,7 @@ get_new_active_ppa: ldrh w0, [x2,818] strh w0, [x19,2] strb wzr, [x19,6] -.L2415: +.L2494: mov w0, w22 ldr x25, [sp,64] ldp x19, x20, [sp,16] @@ -15887,20 +16667,20 @@ FtlWriteDumpData: stp x21, x22, [sp,32] stp x23, x24, [sp,48] ldr w0, [x20,1400] - cbnz w0, .L2420 + cbnz w0, .L2499 ldrh w2, [x20,3612] - cbz w2, .L2422 + cbz w2, .L2501 ldrb w1, [x20,3616] - cbnz w1, .L2422 + cbnz w1, .L2501 ldrb w1, [x20,3615] ldrh w3, [x20,818] mul w1, w1, w3 cmp w2, w1 - beq .L2422 + beq .L2501 ldrb w23, [x20,3618] ldr w22, [x20,1396] ldrh w24, [x20,748] - cbnz w23, .L2420 + cbnz w23, .L2499 sub w22, w22, #1 add x1, x29, 84 mov w0, w22 @@ -15915,29 +16695,29 @@ FtlWriteDumpData: str x1, [x29,96] str x21, [x29,104] str w23, [x21,4] - beq .L2424 + beq .L2503 add x0, x29, 88 mov w1, 1 mov w2, w23 bl FlashReadPages - b .L2425 -.L2424: + b .L2504 +.L2503: ldr x0, [x20,1048] mov w1, 255 ldrh w2, [x20,828] bl ftl_memset -.L2425: +.L2504: add x25, x19, :lo12:.LANCHOR2 mov w0, -3947 lsl w24, w24, 2 strh w0, [x21] mov w23, 0 add x20, x25, 3608 -.L2426: +.L2505: cmp w23, w24 - beq .L2427 + beq .L2506 ldrh w0, [x20,4] - cbz w0, .L2427 + cbz w0, .L2506 ldr w0, [x29,92] add w23, w23, 1 str w0, [x21,12] @@ -15960,16 +16740,16 @@ FtlWriteDumpData: bl FlashProgPages ldrh w0, [x20] bl decrement_vpc_count - b .L2426 -.L2427: + b .L2505 +.L2506: add x19, x19, :lo12:.LANCHOR2 mov w0, 1 strb w0, [x19,3618] - b .L2420 -.L2422: + b .L2499 +.L2501: add x19, x19, :lo12:.LANCHOR2 strb wzr, [x19,3618] -.L2420: +.L2499: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -15987,23 +16767,23 @@ l2p_flush: mov w19, 0 adrp x20, .LANCHOR2 bl FtlWriteDumpData -.L2438: +.L2517: add x1, x20, :lo12:.LANCHOR2 ldrh w0, [x1,858] cmp w0, w19 - bls .L2441 + bls .L2520 ldr x1, [x1,1264] ubfiz x0, x19, 4, 16 add x0, x1, x0 ldr w0, [x0,4] - tbz w0, #31, .L2439 + tbz w0, #31, .L2518 mov w0, w19 bl flush_l2p_region -.L2439: +.L2518: add w19, w19, 1 uxth w19, w19 - b .L2438 -.L2441: + b .L2517 +.L2520: mov w0, 0 ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 @@ -16016,64 +16796,62 @@ FtlSuperblockPowerLostFix: stp x29, x30, [sp, -128]! add x29, sp, 0 stp x19, x20, [sp,16] - mov x19, x0 - adrp x0, .LANCHOR0+136 - stp x21, x22, [sp,32] + adrp x20, .LANCHOR2 str x23, [sp,48] - ldrb w20, [x0,#:lo12:.LANCHOR0+136] - cbz w20, .L2456 - ldrb w20, [x19,8] - cmp w20, 1 - bne .L2451 - ldrh w21, [x19,4] - b .L2443 -.L2451: - mov w20, 0 -.L2456: - mov w21, 12 -.L2443: - adrp x23, .LANCHOR2 - mov w22, -1 -.L2444: - sub w21, w21, #1 - cmn w21, #1 - beq .L2446 + add x1, x20, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + ldr w1, [x1,1400] + cbnz w1, .L2521 + adrp x2, .LANCHOR0+136 + ldrb w21, [x2,#:lo12:.LANCHOR0+136] + cbz w21, .L2535 + ldrb w21, [x0,8] + cmp w21, 1 + bne .L2531 + ldrh w22, [x0,4] + b .L2523 +.L2531: + mov w21, w1 +.L2535: + mov w22, 12 +.L2523: + mov x19, x0 + mov w23, -1 +.L2524: + sub w22, w22, #1 + cmn w22, #1 + beq .L2526 ldrh w0, [x19,4] - cbnz w0, .L2445 -.L2446: - adrp x0, .LANCHOR2 - ldrh w1, [x19] - add x0, x0, :lo12:.LANCHOR2 - ldrh w4, [x19,4] - lsl x1, x1, 1 - ldr x3, [x0,1184] - ldrh w2, [x3,x1] - sub w2, w2, w4 - strh w2, [x3,x1] + cbnz w0, .L2525 +.L2526: + add x20, x20, :lo12:.LANCHOR2 + ldrh w0, [x19] + ldrh w3, [x19,4] + lsl x0, x0, 1 + ldr x2, [x20,1184] + ldrh w1, [x2,x0] + sub w1, w1, w3 + strh w1, [x2,x0] strb wzr, [x19,6] - ldrh w0, [x0,818] + ldrh w0, [x20,818] strh w0, [x19,2] strh wzr, [x19,4] - ldp x21, x22, [sp,32] - ldp x19, x20, [sp,16] - ldr x23, [sp,48] - ldp x29, x30, [sp], 128 - ret -.L2445: + b .L2521 +.L2525: mov x0, x19 bl get_new_active_ppa str w0, [x29,76] cmn w0, #1 - beq .L2446 - add x2, x23, :lo12:.LANCHOR2 - str w22, [x29,96] + beq .L2526 + add x2, x20, :lo12:.LANCHOR2 + str w23, [x29,96] mov w3, 0 ldr x1, [x2,1112] ldr x0, [x2,1048] str x0, [x29,80] str x1, [x29,88] - str w22, [x1,8] - str w22, [x1,12] + str w23, [x1,8] + str w23, [x1,12] ldrh w0, [x19] strh w0, [x1,2] strh wzr, [x1] @@ -16085,11 +16863,17 @@ FtlSuperblockPowerLostFix: csel w0, w0, wzr, ne str w0, [x2,876] add x0, x29, 72 - mov w2, w20 + mov w2, w21 bl FlashProgPages ldrh w0, [x19] bl decrement_vpc_count - b .L2444 + b .L2524 +.L2521: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 128 + ret .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix .align 2 .global FtlVpcCheckAndModify @@ -16097,11 +16881,11 @@ FtlSuperblockPowerLostFix: FtlVpcCheckAndModify: stp x29, x30, [sp, -80]! adrp x1, .LANCHOR3 - adrp x0, .LC129 + adrp x0, .LC49 add x1, x1, :lo12:.LANCHOR3 add x29, sp, 0 - add x1, x1, 16 - add x0, x0, :lo12:.LC129 + add x1, x1, 72 + add x0, x0, :lo12:.LC49 stp x19, x20, [sp,16] stp x21, x22, [sp,32] adrp x19, .LANCHOR2 @@ -16115,18 +16899,18 @@ FtlVpcCheckAndModify: ldr x0, [x0,1176] lsl w2, w2, 1 bl ftl_memset -.L2458: +.L2537: add x19, x21, :lo12:.LANCHOR2 ldr w0, [x19,1396] cmp w20, w0 - bcs .L2473 + bcs .L2552 mov w0, w20 add x1, x29, 76 mov w2, 0 bl log2phys ldr w0, [x29,76] cmn w0, #1 - beq .L2459 + beq .L2538 lsr x0, x0, 10 bl P2V_block_in_plane ubfiz x0, x0, 1, 16 @@ -16134,39 +16918,39 @@ FtlVpcCheckAndModify: ldrh w1, [x2,x0] add w1, w1, 1 strh w1, [x2,x0] -.L2459: +.L2538: add w20, w20, 1 - b .L2458 -.L2473: - adrp x22, .LC130 + b .L2537 +.L2552: + adrp x22, .LC150 mov w20, 0 mov w23, 65535 - add x22, x22, :lo12:.LC130 -.L2461: + add x22, x22, :lo12:.LC150 +.L2540: ldrh w0, [x19,756] cmp w0, w20 - bls .L2474 + bls .L2553 ubfiz x21, x20, 1, 16 ldr x0, [x19,1184] ldrh w2, [x0,x21] ldr x0, [x19,1176] ldrh w3, [x0,x21] cmp w2, w3 - beq .L2464 + beq .L2543 cmp w2, w23 - beq .L2464 + beq .L2543 mov x0, x22 mov w1, w20 bl printk ldrh w0, [x19,3608] cmp w0, w20 - beq .L2464 + beq .L2543 ldrh w0, [x19,3704] cmp w0, w20 - beq .L2464 + beq .L2543 ldrh w0, [x19,3656] cmp w0, w20 - beq .L2464 + beq .L2543 ldr x0, [x19,1176] ldrh w1, [x0,x21] ldr x0, [x19,1184] @@ -16175,11 +16959,11 @@ FtlVpcCheckAndModify: bl update_vpc_list bl l2p_flush bl FtlVpcTblFlush -.L2464: +.L2543: add w20, w20, 1 uxth w20, w20 - b .L2461 -.L2474: + b .L2540 +.L2553: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldr x23, [sp,48] @@ -16198,89 +16982,89 @@ allocate_new_data_superblock: stp x21, x22, [sp,32] ldr w1, [x2,1400] ldrh w22, [x0] - cbnz w1, .L2476 + cbnz w1, .L2555 mov x21, x0 mov w0, 65535 cmp w22, w0 - beq .L2477 + beq .L2556 ubfiz x1, x22, 1, 16 ldr x0, [x2,1184] ldrh w0, [x0,x1] - cbz w0, .L2478 + cbz w0, .L2557 mov w0, w22 bl INSERT_DATA_LIST - b .L2477 -.L2478: + b .L2556 +.L2557: mov w0, w22 bl INSERT_FREE_LIST -.L2477: +.L2556: add x1, x19, :lo12:.LANCHOR2 strb wzr, [x21,8] add x0, x1, 3656 cmp x21, x0 - beq .L2479 + beq .L2558 ldrh w2, [x1,768] cmp w2, 1 - beq .L2479 + beq .L2558 adrp x0, .LANCHOR0+136 ldrb w0, [x0,#:lo12:.LANCHOR0+136] - cbz w0, .L2480 -.L2479: + cbz w0, .L2559 +.L2558: mov w0, 1 strb w0, [x21,8] - b .L2481 -.L2480: + b .L2560 +.L2559: add x0, x1, 3608 cmp x21, x0 - bne .L2481 + bne .L2560 cmp w2, 3 - beq .L2483 + beq .L2562 ldr w0, [x1,868] cmp w0, 1 - bne .L2484 -.L2483: + bne .L2563 +.L2562: add x1, x19, :lo12:.LANCHOR2 mov w0, 1 strb w0, [x1,3616] -.L2484: +.L2563: add x1, x19, :lo12:.LANCHOR2 ldr w0, [x1,652] - cbz w0, .L2481 + cbz w0, .L2560 ldr w0, [x1,920] cmp w0, 29 - bhi .L2481 + bhi .L2560 mov w0, 1 strb w0, [x1,3616] -.L2481: +.L2560: adrp x1, .LANCHOR4 add x0, x1, :lo12:.LANCHOR4 mov x20, x1 - ldrh w2, [x0,160] + ldrh w2, [x0,4000] mov w0, 65535 cmp w2, w0 - beq .L2486 + beq .L2565 cmp w22, w2 - bne .L2487 + bne .L2566 add x19, x19, :lo12:.LANCHOR2 ubfiz x1, x2, 1, 16 ldr x0, [x19,1184] ldrh w0, [x0,x1] - cbz w0, .L2488 -.L2487: + cbz w0, .L2567 +.L2566: mov w0, w2 bl update_vpc_list -.L2488: +.L2567: add x1, x20, :lo12:.LANCHOR4 mov w0, -1 - strh w0, [x1,160] -.L2486: + strh w0, [x1,4000] +.L2565: mov x0, x21 bl allocate_data_superblock bl l2p_flush mov w0, 0 bl FtlEctTblFlush bl FtlVpcTblFlush -.L2476: +.L2555: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -16292,34 +17076,37 @@ allocate_new_data_superblock: .type FtlReadRefresh, %function FtlReadRefresh: stp x29, x30, [sp, -112]! - adrp x1, .LANCHOR2 - add x0, x1, :lo12:.LANCHOR2 + adrp x1, .LANCHOR4 + add x2, x1, :lo12:.LANCHOR4 add x29, sp, 0 - add x2, x0, 3968 + add x0, x2, 3456 stp x19, x20, [sp,16] - str x21, [sp,32] - ldr w3, [x2,80] - cbz w3, .L2502 - ldr w3, [x2,84] - ldr w1, [x0,1396] - cmp w3, w1 - bcs .L2503 - mov w20, 2048 - mov x19, x0 -.L2508: - ldr w0, [x19,4052] - ldr w1, [x19,1396] + stp x21, x22, [sp,32] + adrp x19, .LANCHOR2 + ldr w3, [x0,80] + cbz w3, .L2581 + add x1, x19, :lo12:.LANCHOR2 + ldr w4, [x0,84] + ldr w3, [x1,1396] + cmp w4, w3 + bcs .L2582 + mov w21, 2048 + mov x20, x2 +.L2587: + add x1, x19, :lo12:.LANCHOR2 + ldr w0, [x20,3540] + ldr w1, [x1,1396] cmp w0, w1 - bcs .L2505 + bcs .L2584 add x1, x29, 52 mov w2, 0 bl log2phys - ldr w0, [x19,4052] + ldr w0, [x20,3540] ldr w1, [x29,52] add w0, w0, 1 - str w0, [x19,4052] + str w0, [x20,3540] cmn w1, #1 - beq .L2506 + beq .L2585 str w1, [x29,60] mov w2, 0 str w0, [x29,80] @@ -16331,58 +17118,60 @@ FtlReadRefresh: bl FlashReadPages ldr w0, [x29,56] cmp w0, 256 - bne .L2505 + bne .L2584 ldr w0, [x29,52] lsr x0, x0, 10 bl P2V_block_in_plane bl FtlGcRefreshBlock - b .L2505 -.L2506: - subs w20, w20, #1 - bne .L2508 -.L2505: + b .L2584 +.L2585: + subs w21, w21, #1 + bne .L2587 +.L2584: mov w0, -1 - b .L2510 -.L2503: - ldr w0, [x0,900] - str wzr, [x2,80] - str wzr, [x2,84] - str w0, [x2,76] - b .L2516 -.L2502: + b .L2589 +.L2582: + ldr w1, [x1,900] + str wzr, [x0,80] + str wzr, [x0,84] + str w1, [x0,76] + b .L2595 +.L2581: + add x2, x19, :lo12:.LANCHOR2 + ldr w0, [x2,916] + ldr w3, [x2,652] adrp x2, .LANCHOR0+136 - ldr w3, [x0,916] - ldr w0, [x0,652] ldrb w4, [x2,#:lo12:.LANCHOR0+136] mov w2, 4194304 - cbnz w4, .L2511 - add w0, w0, w3, lsr 10 + cbnz w4, .L2590 + add w0, w3, w0, lsr 10 mov w3, 33554432 asr w2, w3, w0 -.L2511: - add x4, x1, :lo12:.LANCHOR2 - ldr w3, [x4,900] - ldr w0, [x4,4044] - add w5, w3, 1048576 - cmp w0, w5 - bhi .L2512 +.L2590: + add x19, x19, :lo12:.LANCHOR2 + add x0, x1, :lo12:.LANCHOR4 + ldr w3, [x19,900] + ldr w0, [x0,3532] + add w4, w3, 1048576 + cmp w0, w4 + bhi .L2591 add w0, w2, w0 cmp w0, w3 - bcc .L2512 - ldrb w2, [x4,3548] + bcc .L2591 + ldrb w2, [x19,3548] mov w0, 0 - cbnz w2, .L2510 -.L2512: - add x0, x1, :lo12:.LANCHOR2 + cbnz w2, .L2589 +.L2591: + add x0, x1, :lo12:.LANCHOR4 mov w1, 1 - str wzr, [x0,4052] - str w1, [x0,4048] - str w3, [x0,4044] -.L2516: + str wzr, [x0,3540] + str w1, [x0,3536] + str w3, [x0,3532] +.L2595: mov w0, 0 -.L2510: +.L2589: ldp x19, x20, [sp,16] - ldr x21, [sp,32] + ldp x21, x22, [sp,32] ldp x29, x30, [sp], 112 ret .size FtlReadRefresh, .-FtlReadRefresh @@ -16401,293 +17190,302 @@ ftl_do_gc: stp x25, x26, [sp,64] stp x27, x28, [sp,80] ldr w4, [x3,1400] - cbnz w4, .L2662 + cbnz w4, .L2741 ldr w4, [x3,924] - cbnz w4, .L2662 + cbnz w4, .L2741 ldrh w4, [x3,3584] cmp w4, 47 - bls .L2662 - mov w23, w0 + bls .L2741 + str w0, [x29,124] adrp x0, .LANCHOR1+3068 mov w24, w1 ldrh w1, [x0,#:lo12:.LANCHOR1+3068] mov w0, 65535 cmp w1, w0 - bne .L2519 -.L2522: + bne .L2598 +.L2601: add x0, x19, :lo12:.LANCHOR2 mov w2, 65535 ldrh w1, [x0,950] cmp w1, w2 - bne .L2520 - b .L2521 -.L2519: + bne .L2599 + b .L2600 +.L2598: ldrh w1, [x3,3704] cmp w1, w0 - beq .L2522 + beq .L2601 mov w0, 1 bl FtlGcFreeTempBlock mov w2, 1 - cbz w0, .L2522 - b .L2662 -.L2520: + cbz w0, .L2601 + b .L2741 +.L2599: ldrh w3, [x0,948] cmp w3, w2 - bne .L2521 + bne .L2600 strh w1, [x0,948] mov w1, -1 strh w1, [x0,950] -.L2521: +.L2600: add x1, x19, :lo12:.LANCHOR2 - cmp w23, 1 + ldr w2, [x29,124] + adrp x22, .LANCHOR4 + cmp w2, 1 ldr w0, [x1,940] add w0, w0, 1 - add w0, w0, w23, lsl 7 + add w0, w0, w2, lsl 7 str w0, [x1,940] - bne .L2533 + bne .L2612 ldr w1, [x1,652] - cbnz w1, .L2524 + cbnz w1, .L2603 adrp x1, .LANCHOR0+136 ldrb w1, [x1,#:lo12:.LANCHOR0+136] - cbz w1, .L2533 -.L2524: + cbz w1, .L2612 +.L2603: add x20, x19, :lo12:.LANCHOR2 ldr w1, [x20,920] cmp w1, 29 - bhi .L2533 - adrp x21, .LANCHOR4 - add x1, x21, :lo12:.LANCHOR4 - ldrh w1, [x1,360] + bhi .L2612 + adrp x21, .LANCHOR5 + add x1, x21, :lo12:.LANCHOR5 + ldrh w1, [x1,-152] add w0, w0, w1 str w0, [x20,940] bl FtlGcReFreshBadBlk - ldrh w0, [x20,3920] + add x0, x22, :lo12:.LANCHOR4 mov w1, 65535 + ldrh w0, [x0,3408] cmp w0, w1 - bne .L2533 + bne .L2612 ldrh w1, [x20,948] cmp w1, w0 - bne .L2533 + bne .L2612 ldr w0, [x20,940] cmp w0, 1024 - bhi .L2525 + bhi .L2604 ldrh w0, [x20,3600] cmp w0, 63 - bhi .L2533 -.L2525: + bhi .L2612 +.L2604: add x0, x19, :lo12:.LANCHOR2 - add x1, x21, :lo12:.LANCHOR4 + add x1, x21, :lo12:.LANCHOR5 ldrh w2, [x0,954] ldrh w3, [x0,3600] add w2, w2, 64 - strh wzr, [x1,360] + strh wzr, [x1,-152] cmp w3, w2 - bgt .L2533 + bgt .L2612 str wzr, [x0,940] ldr w0, [x0,920] - cbnz w0, .L2526 + cbnz w0, .L2605 mov w0, 6 - b .L2684 -.L2526: + b .L2763 +.L2605: cmp w0, 5 - bhi .L2527 + bhi .L2606 mov w0, 18 -.L2684: - strh w0, [x1,360] -.L2527: +.L2763: + strh w0, [x1,-152] +.L2606: mov w0, 32 mov w27, 65535 bl List_get_gc_head_node uxth w25, w0 cmp w25, w27 - beq .L2532 - add x22, x19, :lo12:.LANCHOR2 - ldrh w0, [x22,956] - cbz w0, .L2529 - ldrh w1, [x22,820] + beq .L2611 + add x23, x19, :lo12:.LANCHOR2 + ldrh w0, [x23,956] + cbz w0, .L2608 + ldrh w1, [x23,820] ubfiz x25, x25, 1, 16 - ldrh w3, [x22,748] - ldr x26, [x22,1184] + ldrh w3, [x23,748] + ldr x26, [x23,1184] mul w1, w1, w3 ldrh w2, [x26,x25] add w1, w1, 1 cmp w2, w1 - bgt .L2532 + bgt .L2611 add w1, w0, 1 - str wzr, [x22,928] + str wzr, [x23,928] uxth w1, w1 - strh w1, [x22,956] - str x1, [x29,120] + strh w1, [x23,956] + str x1, [x29,112] bl List_get_gc_head_node uxth w20, w0 cmp w20, w27 - ldr x1, [x29,120] - beq .L2532 + ldr x1, [x29,112] + beq .L2611 ubfiz x27, x20, 1, 16 - adrp x0, .LC131 + adrp x0, .LC151 ldrh w4, [x26,x25] - add x0, x0, :lo12:.LC131 + add x0, x0, :lo12:.LC151 mov w2, w20 ldrh w3, [x26,x27] bl printk - ldrh w0, [x22,956] + ldrh w0, [x23,956] cmp w0, 40 - bls .L2530 - ldr x0, [x22,1184] + bls .L2609 + ldr x0, [x23,1184] ldrh w0, [x0,x27] cmp w0, 32 - bls .L2530 - strh wzr, [x22,956] -.L2530: - add x21, x21, :lo12:.LANCHOR4 + bls .L2609 + strh wzr, [x23,956] +.L2609: + add x21, x21, :lo12:.LANCHOR5 mov w0, 6 - strh w0, [x21,360] - b .L2534 -.L2529: + strh w0, [x21,-152] + b .L2613 +.L2608: mov w0, 1 - strh w0, [x22,956] -.L2532: + strh w0, [x23,956] +.L2611: bl GetSwlReplaceBlock uxth w20, w0 mov w0, 65535 cmp w20, w0 - bne .L2534 - add x21, x21, :lo12:.LANCHOR4 - strh wzr, [x21,360] -.L2533: - add x22, x19, :lo12:.LANCHOR2 + bne .L2613 + add x21, x21, :lo12:.LANCHOR5 + strh wzr, [x21,-152] +.L2612: + add x0, x22, :lo12:.LANCHOR4 + ldrh w20, [x0,3408] mov w0, 65535 - ldrh w20, [x22,3920] cmp w20, w0 - bne .L2690 - ldrh w0, [x22,3704] + bne .L2769 + add x23, x19, :lo12:.LANCHOR2 + ldrh w0, [x23,3704] cmp w0, w20 - beq .L2691 -.L2534: + beq .L2770 +.L2613: mov w0, 65535 cmp w20, w0 cset w1, eq - cbz w1, .L2547 - cbnz w23, .L2547 + cbz w1, .L2626 + ldr w0, [x29,124] + cbnz w0, .L2626 add x0, x19, :lo12:.LANCHOR2 - mov w21, 1 + mov w23, 1 ldrh w1, [x0,3600] cmp w1, 24 - bhi .L2548 + bhi .L2627 cmp w1, 16 - ldrh w21, [x0,818] - bls .L2549 - lsr w21, w21, 5 - b .L2548 -.L2549: + ldrh w23, [x0,818] + bls .L2628 + lsr w23, w23, 5 + b .L2627 +.L2628: cmp w1, 12 - bls .L2550 - lsr w21, w21, 4 - b .L2548 -.L2550: - lsr w0, w21, 2 + bls .L2629 + lsr w23, w23, 4 + b .L2627 +.L2629: + lsr w0, w23, 2 cmp w1, 9 - csel w21, w0, w21, cs -.L2548: + csel w23, w0, w23, cs +.L2627: add x0, x19, :lo12:.LANCHOR2 ldrh w2, [x0,952] cmp w2, w1 - bcs .L2552 + bcs .L2631 ldrh w1, [x0,3704] mov w2, 65535 cmp w1, w2 - bne .L2553 + bne .L2632 ldrh w2, [x0,948] cmp w2, w1 - bne .L2553 - adrp x1, .LANCHOR4+360 - ldrh w2, [x1,#:lo12:.LANCHOR4+360] - cbnz w2, .L2554 + bne .L2632 + adrp x1, .LANCHOR5-152 + ldrh w2, [x1,#:lo12:.LANCHOR5-152] + cbnz w2, .L2633 ldr w1, [x0,1396] ldr w3, [x0,3892] add w1, w1, w1, lsl 1 cmp w3, w1, lsr 2 - bcs .L2555 -.L2554: + bcs .L2634 +.L2633: + add x22, x22, :lo12:.LANCHOR4 add x1, x19, :lo12:.LANCHOR2 - ldrh w0, [x1,3916] + ldrh w0, [x22,3404] add w0, w0, w0, lsl 1 asr w0, w0, 2 strh w0, [x1,952] - b .L2556 -.L2555: + b .L2635 +.L2634: mov w1, 18 strh w1, [x0,952] -.L2556: +.L2635: add x19, x19, :lo12:.LANCHOR2 str wzr, [x19,928] - b .L2662 -.L2553: + b .L2741 +.L2632: + add x0, x22, :lo12:.LANCHOR4 add x1, x19, :lo12:.LANCHOR2 - ldrh w0, [x1,3916] + ldrh w0, [x0,3404] add w0, w0, w0, lsl 1 asr w0, w0, 2 strh w0, [x1,952] -.L2552: +.L2631: cmp w24, 2 - bhi .L2617 + bhi .L2696 add x0, x19, :lo12:.LANCHOR2 ldr w0, [x0,652] - cbz w0, .L2617 - add w21, w21, 1 - uxth w21, w21 - b .L2617 -.L2547: + cbz w0, .L2696 + add w23, w23, 1 + uxth w23, w23 + b .L2696 +.L2626: add x21, x19, :lo12:.LANCHOR2 mov w2, 65535 ldrh w0, [x21,3704] cmp w0, w2 - bne .L2559 - cbz w1, .L2559 + bne .L2638 + cbz w1, .L2638 ldrh w1, [x21,948] cmp w1, w0 - bne .L2559 - ldrh w1, [x21,3920] - cmp w1, w0 - beq .L2560 -.L2565: + bne .L2638 + add x1, x22, :lo12:.LANCHOR4 + ldrh w2, [x1,3408] + cmp w2, w0 + beq .L2639 +.L2644: mov w20, 65535 - b .L2559 -.L2560: + b .L2638 +.L2639: ldrh w24, [x21,3600] - adrp x20, .LANCHOR4 + adrp x20, .LANCHOR5 ldrh w0, [x21,952] str wzr, [x21,928] cmp w0, w24 - bcs .L2561 - add x0, x20, :lo12:.LANCHOR4 - ldrh w0, [x0,360] - cbnz w0, .L2562 + bcs .L2640 + add x0, x20, :lo12:.LANCHOR5 + ldrh w0, [x0,-152] + cbnz w0, .L2641 ldr w0, [x21,1396] ldr w1, [x21,3892] add w0, w0, w0, lsl 1 cmp w1, w0, lsr 2 - bcs .L2563 -.L2562: + bcs .L2642 +.L2641: + add x22, x22, :lo12:.LANCHOR4 add x19, x19, :lo12:.LANCHOR2 - ldrh w0, [x19,3916] + ldrh w0, [x22,3404] add w0, w0, w0, lsl 1 asr w0, w0, 2 strh w0, [x19,952] - b .L2564 -.L2563: + b .L2643 +.L2642: mov w0, 18 strh w0, [x21,952] -.L2564: - add x20, x20, :lo12:.LANCHOR4 +.L2643: + add x20, x20, :lo12:.LANCHOR5 bl FtlReadRefresh - ldrh w2, [x20,360] - b .L2662 -.L2561: - add x22, x20, :lo12:.LANCHOR4 - ldrh w0, [x22,360] - cbnz w0, .L2565 - ldrh w20, [x21,3916] + ldrh w2, [x20,-152] + b .L2741 +.L2640: + add x23, x20, :lo12:.LANCHOR5 + ldrh w0, [x23,-152] + cbnz w0, .L2644 + ldrh w20, [x1,3404] add w1, w20, w20, lsl 1 asr w1, w1, 2 strh w1, [x21,952] @@ -16701,456 +17499,468 @@ ftl_do_gc: mov w2, 2 sdiv w0, w0, w2 cmp w1, w0 - ble .L2566 + ble .L2645 sub w20, w20, #1 cmp w24, w20 - blt .L2566 + blt .L2645 bl FtlReadRefresh - b .L2688 -.L2566: - cbnz w1, .L2565 + b .L2767 +.L2645: + cbnz w1, .L2644 mov w0, -1 add x19, x19, :lo12:.LANCHOR2 bl decrement_vpc_count ldrh w2, [x19,3600] add w2, w2, 1 - b .L2662 -.L2559: + b .L2741 +.L2638: add x0, x19, :lo12:.LANCHOR2 - mov w21, 2 + mov w23, 2 ldr w0, [x0,652] cmp w0, wzr - csinc w21, w21, wzr, ne - b .L2558 -.L2617: + csinc w23, w23, wzr, ne + b .L2637 +.L2696: mov w20, 65535 -.L2558: - add x0, x19, :lo12:.LANCHOR2 +.L2637: + add x0, x22, :lo12:.LANCHOR4 mov w2, 65535 - ldrh w1, [x0,3920] + ldrh w1, [x0,3408] cmp w1, w2 - bne .L2568 + bne .L2647 cmp w20, w1 - beq .L2569 - strh w20, [x0,3920] - b .L2570 -.L2569: - ldrh w1, [x0,948] - cmp w1, w20 - beq .L2570 - ubfiz x1, x1, 1, 16 - ldr x2, [x0,1184] - ldrh w1, [x2,x1] - cbnz w1, .L2571 - mov w1, -1 - strh w1, [x0,948] -.L2571: - add x0, x19, :lo12:.LANCHOR2 - ldrh w1, [x0,948] - strh w1, [x0,3920] - mov w1, -1 - strh w1, [x0,948] -.L2570: - add x22, x19, :lo12:.LANCHOR2 + beq .L2648 + strh w20, [x0,3408] + b .L2649 +.L2648: + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,948] + cmp w0, w20 + beq .L2649 + ubfiz x0, x0, 1, 16 + ldr x2, [x1,1184] + ldrh w0, [x2,x0] + cbnz w0, .L2650 + mov w0, -1 + strh w0, [x1,948] +.L2650: + add x1, x19, :lo12:.LANCHOR2 + add x0, x22, :lo12:.LANCHOR4 + ldrh w2, [x1,948] + strh w2, [x0,3408] + mov w0, -1 + strh w0, [x1,948] +.L2649: + add x21, x22, :lo12:.LANCHOR4 mov w1, 65535 - ldrh w0, [x22,3920] - strb wzr, [x22,3928] + ldrh w0, [x21,3408] + strb wzr, [x21,3416] cmp w0, w1 - beq .L2568 + beq .L2647 bl IsBlkInGcList - cbz w0, .L2573 + cbz w0, .L2652 mov w0, -1 - strh w0, [x22,3920] -.L2573: + strh w0, [x21,3408] +.L2652: adrp x0, .LANCHOR0+136 ldrb w0, [x0,#:lo12:.LANCHOR0+136] - cbz w0, .L2574 - add x0, x19, :lo12:.LANCHOR2 - add x22, x0, 3920 - ldrh w0, [x0,3920] + cbz w0, .L2653 + add x0, x22, :lo12:.LANCHOR4 + add x21, x0, 3408 + ldrh w0, [x0,3408] bl ftl_get_blk_mode - strb w0, [x22,8] -.L2574: - add x22, x19, :lo12:.LANCHOR2 + strb w0, [x21,8] +.L2653: + add x21, x22, :lo12:.LANCHOR4 mov w0, 65535 - add x24, x22, 3920 - ldrh w1, [x22,3920] + add x24, x21, 3408 + ldrh w1, [x21,3408] cmp w1, w0 - beq .L2568 + beq .L2647 mov x0, x24 bl make_superblock - strh wzr, [x22,3922] - adrp x0, .LANCHOR4 - ldrh w2, [x22,3920] - add x0, x0, :lo12:.LANCHOR4 - ldr x1, [x22,1184] - strb wzr, [x22,3926] - strh wzr, [x0,362] + strh wzr, [x21,3410] + adrp x0, .LANCHOR5 + add x1, x19, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LANCHOR5 + ldrh w2, [x21,3408] + strb wzr, [x21,3414] + ldr x1, [x1,1184] + strh wzr, [x0,-150] ldrh w1, [x1,x2,lsl 1] - strh w1, [x0,364] -.L2568: - add x3, x19, :lo12:.LANCHOR2 - ldrh w0, [x3,3920] - ldrh w1, [x3,3608] - cmp w1, w0 - beq .L2575 - ldrh w1, [x3,3656] + strh w1, [x0,-148] +.L2647: + add x21, x22, :lo12:.LANCHOR4 + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x21,3408] + ldrh w2, [x1,3608] + cmp w2, w0 + beq .L2654 + ldrh w1, [x1,3656] cmp w1, w0 - beq .L2575 -.L2576: - mov x28, x3 - mov w24, 65535 - b .L2577 -.L2575: - add x19, x19, :lo12:.LANCHOR2 + bne .L2656 +.L2655: +.L2654: + add x22, x22, :lo12:.LANCHOR4 mov w0, -1 - strh w0, [x19,3920] - b .L2689 -.L2598: - ldrh w0, [x28,3922] - add w21, w21, w0 - uxth w21, w21 - strh w21, [x28,3922] - cmp w21, w25 - bcs .L2692 -.L2600: - ldrh w0, [x28,3600] + strh w0, [x22,3408] + b .L2768 +.L2677: + ldrh w0, [x21,3410] + add w23, w23, w0 + uxth w23, w23 + strh w23, [x21,3410] + cmp w23, w26 + bcs .L2771 +.L2679: + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,3600] cmp w0, 2 - bhi .L2603 - ldrh w21, [x28,818] -.L2577: - ldrh w0, [x28,3920] - cmp w0, w24 - bne .L2578 - str wzr, [x28,928] - adrp x25, .LANCHOR4 -.L2579: - ldrh w22, [x28,956] - mov w0, w22 + bhi .L2682 + ldrh w23, [x1,818] +.L2656: + ldrh w0, [x21,3408] + mov w1, 65535 + cmp w0, w1 + bne .L2657 + add x0, x19, :lo12:.LANCHOR2 + str wzr, [x0,928] +.L2658: + add x26, x19, :lo12:.LANCHOR2 + ldrh w24, [x26,956] + mov w0, w24 bl List_get_gc_head_node - uxth w26, w0 - cmp w26, w24 - strh w26, [x28,3920] - bne .L2580 - strh wzr, [x28,956] + uxth w27, w0 + mov w0, 65535 + strh w27, [x21,3408] + cmp w27, w0 + bne .L2659 + strh wzr, [x26,956] mov w2, 8 - b .L2662 -.L2580: - mov w0, w26 - add w22, w22, 1 + b .L2741 +.L2659: + mov w0, w27 + add w24, w24, 1 bl IsBlkInGcList - cbz w0, .L2581 - strh w22, [x28,956] - b .L2579 -.L2581: - ldrh w5, [x28,748] - ubfiz x1, x26, 1, 16 - ldrh w0, [x28,818] - uxth w22, w22 - ldr x2, [x28,1184] - mov w3, 2 - strh w22, [x28,956] - mul w0, w0, w5 - ldrh w4, [x2,x1] - sdiv w5, w0, w3 - cmp w4, w5 - bgt .L2583 - cmp w4, 8 - bls .L2584 - cmp w22, 48 - bls .L2584 - add x4, x25, :lo12:.LANCHOR4 - ldrh w4, [x4,176] - cmp w4, 35 - bhi .L2584 -.L2583: - strh wzr, [x28,956] -.L2584: + cbz w0, .L2660 + strh w24, [x26,956] + b .L2658 +.L2660: + ldrh w4, [x26,748] + ubfiz x1, x27, 1, 16 + ldrh w0, [x26,818] + uxth w24, w24 + ldr x2, [x26,1184] + strh w24, [x26,956] + mul w0, w0, w4 + mov w4, 2 + ldrh w3, [x2,x1] + sdiv w4, w0, w4 + cmp w3, w4 + bgt .L2662 + cmp w3, 8 + bls .L2663 + cmp w24, 48 + bls .L2663 + ldrh w3, [x21,4016] + cmp w3, 35 + bhi .L2663 +.L2662: + add x3, x19, :lo12:.LANCHOR2 + strh wzr, [x3,956] +.L2663: ldrh w1, [x2,x1] cmp w1, w0 - blt .L2585 - cmp w20, w24 - bne .L2585 + blt .L2664 + mov w0, 65535 + cmp w20, w0 + bne .L2664 + add x22, x22, :lo12:.LANCHOR4 add x19, x19, :lo12:.LANCHOR2 mov w0, -1 strh wzr, [x19,956] - strh w0, [x19,3920] -.L2689: - adrp x0, .LANCHOR4+360 - ldrh w2, [x0,#:lo12:.LANCHOR4+360] - b .L2662 -.L2585: - cbnz w1, .L2586 + strh w0, [x22,3408] +.L2768: + adrp x0, .LANCHOR5-152 + ldrh w2, [x0,#:lo12:.LANCHOR5-152] + b .L2741 +.L2664: + cbnz w1, .L2665 mov w0, -1 bl decrement_vpc_count - ldrh w0, [x28,956] + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,956] add w0, w0, 1 - strh w0, [x28,956] - b .L2579 -.L2586: + strh w0, [x1,956] + b .L2658 +.L2665: adrp x0, .LANCHOR0 - strb wzr, [x28,3928] + strb wzr, [x21,3416] add x0, x0, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L2587 - mov w0, w26 + cbz w0, .L2666 + mov w0, w27 bl ftl_get_blk_mode - strb w0, [x28,3928] -.L2587: - add x22, x28, 3920 - mov x0, x22 + strb w0, [x21,3416] +.L2666: + add x24, x21, 3408 + mov x0, x24 bl make_superblock - adrp x1, .LANCHOR4 - ldrh w2, [x28,3920] - add x1, x1, :lo12:.LANCHOR4 - ldr x0, [x28,1184] - strh wzr, [x1,362] + adrp x1, .LANCHOR5 + add x0, x19, :lo12:.LANCHOR2 + add x1, x1, :lo12:.LANCHOR5 + ldrh w2, [x21,3408] + ldr x0, [x0,1184] + strh wzr, [x1,-150] ldrh w0, [x0,x2,lsl 1] - strh w0, [x1,364] - strh wzr, [x28,3922] - strb wzr, [x28,3926] -.L2578: - cmp w23, 1 - bne .L2588 - bl FtlReadRefresh -.L2588: - mov w0, 1 - str w0, [x28,924] - adrp x0, .LANCHOR0 - ldrh w25, [x28,818] - add x0, x0, :lo12:.LANCHOR0 - ldrb w0, [x0,136] - cbz w0, .L2589 - ldrb w0, [x28,3928] + strh w0, [x1,-148] + strh wzr, [x21,3410] + strb wzr, [x21,3414] +.L2657: + ldr w0, [x29,124] cmp w0, 1 - bne .L2589 - ldrh w25, [x28,820] -.L2589: - ldrh w0, [x28,3922] - add w1, w0, w21 - cmp w1, w25 - ble .L2590 - sub w21, w25, w0 - uxth w21, w21 -.L2590: - mov w26, 0 -.L2591: - cmp w21, w26, uxth - bls .L2598 - add x1, x28, 3920 - ldrh w4, [x1,2] + bne .L2667 + bl FtlReadRefresh +.L2667: + add x0, x19, :lo12:.LANCHOR2 + mov w1, 1 + str w1, [x0,924] + adrp x1, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR0 + ldrh w26, [x0,818] + ldrb w1, [x1,136] + cbz w1, .L2668 + ldrb w1, [x21,3416] + cmp w1, 1 + bne .L2668 + ldrh w26, [x0,820] +.L2668: + ldrh w0, [x21,3410] + add w1, w0, w23 + cmp w1, w26 + ble .L2669 + sub w23, w26, w0 + uxth w23, w23 +.L2669: + mov w27, 0 +.L2670: + cmp w23, w27, uxth + bls .L2677 + add x1, x21, 3408 + add x0, x19, :lo12:.LANCHOR2 + ldrh w3, [x1,2] + ldrh w6, [x0,748] mov x0, 0 - ldrh w6, [x28,748] - add w4, w4, w26 - mov w22, w0 -.L2599: + add w3, w3, w27 + mov w24, w0 +.L2678: cmp w6, w0, uxth - bls .L2693 + bls .L2772 add x2, x1, x0, lsl 1 + mov w4, 65535 ldrh w2, [x2,16] - cmp w2, w24 - beq .L2592 - mov w3, 56 - ldr x7, [x28,1024] - orr w2, w4, w2, lsl 10 - umull x5, w22, w3 - add w22, w22, 1 - add x5, x7, x5 - uxth w22, w22 - str w2, [x5,4] -.L2592: + cmp w2, w4 + beq .L2671 + add x5, x19, :lo12:.LANCHOR2 + mov w4, 56 + orr w2, w3, w2, lsl 10 + umull x4, w24, w4 + ldr x5, [x5,1024] + add w24, w24, 1 + add x4, x5, x4 + uxth w24, w24 + str w2, [x4,4] +.L2671: add x0, x0, 1 - b .L2599 -.L2693: - ldr x0, [x28,1024] - mov w1, w22 - ldrb w2, [x28,3928] - mov x27, 0 + b .L2678 +.L2772: + add x25, x19, :lo12:.LANCHOR2 + ldrb w2, [x21,3416] + mov w1, w24 + mov x28, 0 + ldr x0, [x25,1024] bl FlashReadPages -.L2594: - cmp w22, w27, uxth - bls .L2694 +.L2673: + cmp w24, w28, uxth + bls .L2773 mov x0, 56 - mul x5, x27, x0 - ldr x0, [x28,1024] + mul x5, x28, x0 + ldr x0, [x25,1024] add x1, x0, x5 ldr w0, [x0,x5] cmn w0, #1 ldr x4, [x1,16] - beq .L2619 + beq .L2698 ldrh w0, [x4] mov w1, 61589 cmp w0, w1 - bne .L2619 + bne .L2698 ldr w0, [x4,8] add x1, x29, 140 mov w2, 0 - str x5, [x29,112] - str x4, [x29,120] + str x5, [x29,104] + str x4, [x29,112] bl log2phys - ldr x6, [x28,1024] - ldr x5, [x29,112] + ldr x2, [x25,1024] + ldr x5, [x29,104] ldr w0, [x29,140] - add x6, x6, x5 - ldr x4, [x29,120] + add x2, x2, x5 + ldr x4, [x29,112] and w0, w0, 2147483647 - ldr w1, [x6,4] + ldr w1, [x2,4] cmp w0, w1 - bne .L2619 - adrp x0, .LANCHOR4 - ldr x1, [x28,1000] - add x2, x0, :lo12:.LANCHOR4 - str x2, [x29,112] + bne .L2698 + adrp x0, .LANCHOR5 + mov x3, 56 + add x1, x0, :lo12:.LANCHOR5 str x5, [x29,96] str x4, [x29,104] - ldrh w0, [x2,362] + ldrh w0, [x1,-150] add w0, w0, 1 - strh w0, [x2,362] - ldr w0, [x2,144] - mov x2, 56 - madd x1, x0, x2, x1 - ldr w0, [x6,24] - str x1, [x29,120] + strh w0, [x1,-150] + ldr w0, [x21,3984] + ldr x1, [x25,1000] + madd x1, x0, x3, x1 + ldr w0, [x2,24] + str x1, [x29,112] str w0, [x1,24] bl Ftl_get_new_temp_ppa - ldr x1, [x29,120] - mov x3, 56 - ldr x2, [x29,112] + ldr x1, [x29,112] + mov x2, 56 ldr x5, [x29,96] - str w0, [x1,4] - ldr w0, [x2,144] - ldr x1, [x28,1000] ldr x4, [x29,104] - str x2, [x29,120] - madd x0, x0, x3, x1 - ldr x1, [x28,1024] + str w0, [x1,4] + ldr w0, [x21,3984] + ldr x1, [x25,1000] + madd x0, x0, x2, x1 + ldr x1, [x25,1024] add x1, x1, x5 - ldr x6, [x1,8] - str x6, [x0,8] - add x6, x28, 3704 - str x6, [x29,112] + ldr x2, [x1,8] + str x2, [x0,8] + add x2, x25, 3704 + str x2, [x29,112] ldr x1, [x1,16] str x1, [x0,16] mov w1, 1 ldr w0, [x29,140] str w0, [x4,12] - ldrh w0, [x28,3704] + ldrh w0, [x25,3704] strh w0, [x4,2] - ldr w0, [x28,876] + ldr w0, [x25,876] str w0, [x4,4] - ldr w0, [x2,144] + ldr w0, [x21,3984] add w0, w0, 1 - str w0, [x2,144] - ldr x0, [x28,1024] + str w0, [x21,3984] + ldr x0, [x25,1024] add x0, x0, x5 bl FtlGcBufAlloc adrp x0, .LANCHOR0 add x0, x0, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbnz w0, .L2596 - ldr x6, [x29,112] - ldr x2, [x29,120] - ldrb w0, [x6,7] - ldr w1, [x2,144] + cbnz w0, .L2675 + ldr x2, [x29,112] + ldr w1, [x21,3984] + ldrb w0, [x2,7] cmp w1, w0 - beq .L2596 - ldrh w0, [x6,4] - cbnz w0, .L2619 -.L2596: + beq .L2675 + ldrh w0, [x2,4] + cbnz w0, .L2698 +.L2675: bl Ftl_gc_temp_data_write_back - cbz w0, .L2619 - adrp x0, .LANCHOR4 + cbz w0, .L2698 + adrp x0, .LANCHOR5 add x19, x19, :lo12:.LANCHOR2 - add x0, x0, :lo12:.LANCHOR4 + add x0, x0, :lo12:.LANCHOR5 str wzr, [x19,924] - ldrh w2, [x0,360] - b .L2662 -.L2619: - add x27, x27, 1 - b .L2594 -.L2694: - add w26, w26, 1 - b .L2591 -.L2692: - adrp x0, .LANCHOR4 - add x22, x0, :lo12:.LANCHOR4 - mov x21, x0 - ldr w1, [x22,144] - cbz w1, .L2601 + ldrh w2, [x0,-152] + b .L2741 +.L2698: + add x28, x28, 1 + b .L2673 +.L2773: + add w27, w27, 1 + b .L2670 +.L2771: + ldr w0, [x21,3984] + adrp x23, .LANCHOR5 + cbz w0, .L2680 bl Ftl_gc_temp_data_write_back - cbz w0, .L2601 - str wzr, [x28,924] -.L2688: - ldrh w2, [x22,360] - b .L2662 -.L2601: - add x0, x21, :lo12:.LANCHOR4 - ldrh w2, [x0,362] - cbnz w2, .L2602 - ldrh w0, [x28,3920] - ldr x1, [x28,1184] + cbz w0, .L2680 + add x19, x19, :lo12:.LANCHOR2 + add x23, x23, :lo12:.LANCHOR5 + str wzr, [x19,924] +.L2767: + ldrh w2, [x23,-152] + b .L2741 +.L2680: + add x23, x23, :lo12:.LANCHOR5 + ldrh w2, [x23,-150] + cbnz w2, .L2681 + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x21,3408] lsl x0, x0, 1 - ldrh w4, [x1,x0] - cbz w4, .L2602 + ldr x1, [x1,1184] + ldrh w3, [x1,x0] + cbz w3, .L2681 strh w2, [x1,x0] - ldrh w0, [x28,3920] + ldrh w0, [x21,3408] bl update_vpc_list bl FtlCacheWriteBack bl l2p_flush bl FtlVpcTblFlush -.L2602: +.L2681: mov w0, -1 - strh w0, [x28,3920] - b .L2600 -.L2603: - adrp x1, .LANCHOR4+360 - str wzr, [x28,924] - ldrh w2, [x1,#:lo12:.LANCHOR4+360] + strh w0, [x21,3408] + b .L2679 +.L2682: + str wzr, [x1,924] + adrp x1, .LANCHOR5-152 + ldrh w2, [x1,#:lo12:.LANCHOR5-152] cmp w2, wzr csinc w2, w2, w0, ne - b .L2662 -.L2691: - ldrh w25, [x22,948] + b .L2741 +.L2770: + ldrh w25, [x23,948] cmp w25, w20 - bne .L2534 - ldrh w0, [x22,3600] + bne .L2613 + ldrh w0, [x23,3600] mov w2, 1024 - ldr w1, [x22,940] + ldr w1, [x23,940] cmp w0, 24 mov w0, 5120 csel w0, w0, w2, cc cmp w1, w0 - bls .L2534 - adrp x0, .LANCHOR4+360 - str wzr, [x22,940] - strh wzr, [x0,#:lo12:.LANCHOR4+360] + bls .L2613 + adrp x0, .LANCHOR5-152 + str wzr, [x23,940] + strh wzr, [x0,#:lo12:.LANCHOR5-152] bl GetSwlReplaceBlock uxth w20, w0 cmp w20, w25 - bne .L2536 - ldrh w1, [x22,3600] - ldrh w0, [x22,954] + bne .L2615 + ldrh w1, [x23,3600] + ldrh w0, [x23,954] cmp w1, w0 - bcs .L2537 + bcs .L2616 mov w0, 64 bl List_get_gc_head_node uxth w0, w0 cmp w0, w20 - beq .L2546 - ldr w2, [x22,864] + beq .L2625 + ldr w2, [x23,864] uxtw x1, w0 - cbnz w2, .L2539 - ldrh w0, [x22,768] + cbnz w2, .L2618 + ldrh w0, [x23,768] cmp w0, 3 - beq .L2539 - ldr w0, [x22,868] - cbnz w0, .L2539 - ldr w0, [x22,652] - cbnz w0, .L2539 + beq .L2618 + ldr w0, [x23,868] + cbnz w0, .L2618 + ldr w0, [x23,652] + cbnz w0, .L2618 adrp x0, .LANCHOR0+136 ldrb w0, [x0,#:lo12:.LANCHOR0+136] - cbz w0, .L2540 -.L2539: + cbz w0, .L2619 +.L2618: add x2, x19, :lo12:.LANCHOR2 ldr x0, [x2,1184] ldrh w4, [x0,x1,lsl 1] @@ -17164,7 +17974,7 @@ ftl_do_gc: csel w0, w1, w0, eq add w0, w3, w0 cmp w4, w0 - bgt .L2542 + bgt .L2621 mov w0, 0 bl List_get_gc_head_node uxth w20, w0 @@ -17173,45 +17983,45 @@ ftl_do_gc: ldr w2, [x0,3892] add w1, w1, w1, lsl 1 cmp w2, w1, lsr 2 - bhi .L2686 + bhi .L2765 mov w1, 160 - b .L2685 -.L2542: + b .L2764 +.L2621: add x0, x19, :lo12:.LANCHOR2 mov w1, 128 - b .L2687 -.L2540: - ldr x2, [x22,1184] + b .L2766 +.L2619: + ldr x2, [x23,1184] ldrh w1, [x2,x1,lsl 1] cmp w1, 7 - bhi .L2545 + bhi .L2624 bl List_get_gc_head_node uxth w20, w0 add x0, x19, :lo12:.LANCHOR2 -.L2686: +.L2765: mov w1, 128 -.L2685: +.L2764: strh w1, [x0,954] mov w0, 65535 cmp w20, w0 - beq .L2546 - b .L2536 -.L2545: + beq .L2625 + b .L2615 +.L2624: add x0, x19, :lo12:.LANCHOR2 mov w1, 64 -.L2687: +.L2766: strh w1, [x0,954] - b .L2546 -.L2537: + b .L2625 +.L2616: mov w0, 80 - strh w0, [x22,954] - b .L2546 -.L2536: + strh w0, [x23,954] + b .L2625 +.L2615: add x5, x19, :lo12:.LANCHOR2 ubfiz x4, x20, 1, 32 - adrp x0, .LC132 + adrp x0, .LC152 mov w1, w20 - add x0, x0, :lo12:.LC132 + add x0, x0, :lo12:.LC152 ldr x3, [x5,1184] ldr x6, [x5,1168] ldrh w2, [x5,3600] @@ -17219,13 +18029,13 @@ ftl_do_gc: ldrh w5, [x5,952] ldrh w4, [x6,x4] bl printk -.L2546: +.L2625: bl FtlGcReFreshBadBlk - b .L2534 -.L2690: + b .L2613 +.L2769: mov w20, w0 - b .L2534 -.L2662: + b .L2613 +.L2741: mov w0, w2 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -17240,142 +18050,145 @@ ftl_do_gc: .type FtlCacheWriteBack, %function FtlCacheWriteBack: stp x29, x30, [sp, -112]! - adrp x0, .LANCHOR4+368 + adrp x0, .LANCHOR5-144 add x29, sp, 0 stp x19, x20, [sp,16] adrp x19, .LANCHOR2 - ldr x20, [x0,#:lo12:.LANCHOR4+368] + ldr x20, [x0,#:lo12:.LANCHOR5-144] add x0, x19, :lo12:.LANCHOR2 stp x21, x22, [sp,32] stp x23, x24, [sp,48] stp x25, x26, [sp,64] stp x27, x28, [sp,80] ldr w22, [x0,1400] - cbnz w22, .L2697 + cbnz w22, .L2776 ldr w1, [x0,968] - cbz w1, .L2697 + cbz w1, .L2776 adrp x0, .LANCHOR0+136 ldrb w0, [x0,#:lo12:.LANCHOR0+136] - cbz w0, .L2699 + cbz w0, .L2778 ldrb w0, [x20,8] cmp w0, 1 cset w22, eq -.L2699: +.L2778: add x0, x19, :lo12:.LANCHOR2 ldrb w3, [x20,9] - adrp x25, .LC133 + adrp x24, .LC153 mov w2, w22 mov w23, 0 - mov w26, 56 + mov w25, 56 ldr x0, [x0,1032] - add x25, x25, :lo12:.LC133 + add x24, x24, :lo12:.LC153 bl FlashProgPages -.L2700: +.L2779: add x0, x19, :lo12:.LANCHOR2 ldr w1, [x0,968] cmp w23, w1 - bcs .L2718 - umull x21, w23, w26 + bcs .L2797 + umull x21, w23, w25 ldr x1, [x0,1032] add x0, x1, x21 - ldr w24, [x1,x21] - cmn w24, #1 - beq .L2721 + ldr w1, [x1,x21] + cmn w1, #1 + beq .L2800 ldr w1, [x0,4] - cbz w22, .L2735 + cbz w22, .L2814 orr w1, w1, -2147483648 -.L2735: +.L2814: ldr w0, [x0,24] mov w2, 1 str w1, [x29,108] - add x24, x19, :lo12:.LANCHOR2 + add x26, x19, :lo12:.LANCHOR2 add x1, x29, 108 bl log2phys - ldr x0, [x24,1032] + ldr x0, [x26,1032] add x21, x0, x21 ldr x0, [x21,16] ldr w0, [x0,12] cmn w0, #1 - beq .L2704 + beq .L2783 lsr x0, x0, 10 bl P2V_block_in_plane uxth w1, w0 ubfiz x0, x1, 1, 16 - ldr x2, [x24,1184] + ldr x2, [x26,1184] mov w21, w1 ldrh w2, [x2,x0] - cbnz w2, .L2705 - mov x0, x25 + cbnz w2, .L2784 + mov x0, x24 bl printk -.L2705: +.L2784: mov w0, w21 bl decrement_vpc_count -.L2704: +.L2783: add w23, w23, 1 - b .L2700 -.L2737: + b .L2779 +.L2816: mov w20, 16386 -.L2717: +.L2796: add x0, x19, :lo12:.LANCHOR2 ldrh w0, [x0,958] - cbz w0, .L2718 + cbz w0, .L2797 mov w0, 1 mov w1, w0 bl ftl_do_gc subs w20, w20, #1 - bne .L2717 -.L2718: + bne .L2796 +.L2797: add x19, x19, :lo12:.LANCHOR2 str wzr, [x19,968] - b .L2697 -.L2721: - adrp x25, .LC133 - mov w23, 0 - mov w26, 56 - mov w27, 1 - add x25, x25, :lo12:.LC133 -.L2701: + b .L2776 +.L2800: + adrp x25, .LANCHOR4 + adrp x26, .LC153 + mov w24, 0 + mov w27, 56 + add x25, x25, :lo12:.LANCHOR4 + add x26, x26, :lo12:.LC153 +.L2780: add x0, x19, :lo12:.LANCHOR2 ldr w1, [x0,968] - cmp w23, w1 - bcs .L2737 - umull x21, w23, w26 + cmp w24, w1 + bcs .L2816 + umull x21, w24, w27 ldr x0, [x0,1032] - str w24, [x0,x21] -.L2707: - add x28, x19, :lo12:.LANCHOR2 - ldr x0, [x28,1032] + mov w1, -1 + mov w28, 1 + str w1, [x0,x21] +.L2786: + add x23, x19, :lo12:.LANCHOR2 + ldr x0, [x23,1032] add x1, x0, x21 ldr w0, [x0,x21] cmn w0, #1 ldr w0, [x1,4] - bne .L2738 + bne .L2817 lsr x0, x0, 10 bl P2V_block_in_plane ldrh w1, [x20] cmp w1, w0, uxth - bne .L2708 - ldr x2, [x28,1184] + bne .L2787 + ldr x2, [x23,1184] ubfiz x1, x1, 1, 16 ldrh w3, [x20,4] ldrh w0, [x2,x1] sub w0, w0, w3 strh w0, [x2,x1] strb wzr, [x20,6] - ldrh w0, [x28,818] + ldrh w0, [x23,818] strh w0, [x20,2] strh wzr, [x20,4] -.L2708: +.L2787: ldrh w0, [x20,4] - cbnz w0, .L2709 + cbnz w0, .L2788 mov x0, x20 bl allocate_new_data_superblock -.L2709: - add x28, x19, :lo12:.LANCHOR2 - ldr w0, [x28,4064] +.L2788: + add x23, x19, :lo12:.LANCHOR2 + ldr w0, [x25,3552] add w0, w0, 1 - str w0, [x28,4064] - ldr x0, [x28,1032] + str w0, [x25,3552] + ldr x0, [x23,1032] add x0, x0, x21 ldr w0, [x0,4] lsr x0, x0, 10 @@ -17383,58 +18196,58 @@ FtlCacheWriteBack: mov x0, x20 bl get_new_active_ppa str w0, [x29,108] - ldr x1, [x28,1032] + ldr x1, [x23,1032] mov w2, w22 add x1, x1, x21 str w0, [x1,4] mov w1, 1 - ldr x0, [x28,1032] + ldr x0, [x23,1032] ldrb w3, [x20,9] add x0, x0, x21 bl FlashProgPages - ldr x0, [x28,1032] + ldr x0, [x23,1032] ldr w0, [x0,x21] cmn w0, #1 - bne .L2710 - str w27, [x28,1400] -.L2710: + bne .L2789 + str w28, [x23,1400] +.L2789: add x0, x19, :lo12:.LANCHOR2 ldr w0, [x0,1400] - cbz w0, .L2707 - b .L2697 -.L2738: - cbz w22, .L2736 + cbz w0, .L2786 + b .L2776 +.L2817: + cbz w22, .L2815 orr w0, w0, -2147483648 -.L2736: +.L2815: str w0, [x29,108] mov w2, 1 ldr w0, [x1,24] - add x28, x19, :lo12:.LANCHOR2 + add x23, x19, :lo12:.LANCHOR2 add x1, x29, 108 bl log2phys - ldr x0, [x28,1032] + ldr x0, [x23,1032] add x21, x0, x21 ldr x0, [x21,16] ldr w0, [x0,12] cmn w0, #1 - beq .L2714 + beq .L2793 lsr x0, x0, 10 bl P2V_block_in_plane uxth w1, w0 ubfiz x0, x1, 1, 16 - ldr x2, [x28,1184] + ldr x2, [x23,1184] mov w21, w1 ldrh w2, [x2,x0] - cbnz w2, .L2715 - mov x0, x25 + cbnz w2, .L2794 + mov x0, x26 bl printk -.L2715: +.L2794: mov w0, w21 bl decrement_vpc_count -.L2714: - add w23, w23, 1 - b .L2701 -.L2697: +.L2793: + add w24, w24, 1 + b .L2780 +.L2776: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -17452,13 +18265,13 @@ FtlSysFlush: stp x29, x30, [sp, -16]! add x29, sp, 0 ldr w0, [x0,#:lo12:.LANCHOR2+1400] - cbnz w0, .L2740 + cbnz w0, .L2819 bl FtlCacheWriteBack bl l2p_flush mov w0, 1 bl FtlEctTblFlush bl FtlVpcTblFlush -.L2740: +.L2819: mov w0, 0 ldp x29, x30, [sp], 16 ret @@ -17472,9 +18285,9 @@ FtlDeInit: add x29, sp, 0 ldr w0, [x0,#:lo12:.LANCHOR1+3064] cmp w0, 1 - bne .L2742 + bne .L2821 bl FtlSysFlush -.L2742: +.L2821: mov w0, 0 ldp x29, x30, [sp], 16 ret @@ -17517,45 +18330,45 @@ ftl_discard: ldr w1, [x0,#:lo12:.LANCHOR0+4048] mov w0, -1 cmp w2, w1 - bhi .L2746 + bhi .L2825 cmp w19, 31 - bls .L2760 + bls .L2839 adrp x22, .LANCHOR2 add x21, x22, :lo12:.LANCHOR2 ldr w0, [x21,1400] - cbnz w0, .L2760 + cbnz w0, .L2839 bl FtlCacheWriteBack ldrh w1, [x21,824] udiv w21, w20, w1 msub w20, w1, w21, w20 uxth w20, w20 - cbz w20, .L2749 + cbz w20, .L2828 sub w1, w1, w20 add w21, w21, 1 cmp w1, w19 csel w1, w1, w19, ls sub w19, w19, w1, uxth -.L2749: +.L2828: mov w0, -1 - adrp x23, .LANCHOR4 + adrp x23, .LANCHOR5 str w0, [x29,76] -.L2750: +.L2829: add x20, x22, :lo12:.LANCHOR2 ldrh w0, [x20,824] cmp w19, w0 - bcc .L2761 + bcc .L2840 mov w0, w21 add x1, x29, 72 mov w2, 0 bl log2phys ldr w0, [x29,72] cmn w0, #1 - beq .L2751 - add x1, x23, :lo12:.LANCHOR4 + beq .L2830 + add x1, x23, :lo12:.LANCHOR5 mov w2, 1 - ldr w0, [x1,376] + ldr w0, [x1,-136] add w0, w0, 1 - str w0, [x1,376] + str w0, [x1,-136] ldr w0, [x20,888] add x1, x29, 76 add w0, w0, 1 @@ -17566,24 +18379,24 @@ ftl_discard: lsr x0, x0, 10 bl P2V_block_in_plane bl decrement_vpc_count -.L2751: +.L2830: add x0, x22, :lo12:.LANCHOR2 add w21, w21, 1 ldrh w0, [x0,824] sub w19, w19, w0 - b .L2750 -.L2761: - adrp x0, .LANCHOR4 - add x0, x0, :lo12:.LANCHOR4 - ldr w1, [x0,376] + b .L2829 +.L2840: + adrp x0, .LANCHOR5 + add x0, x0, :lo12:.LANCHOR5 + ldr w1, [x0,-136] cmp w1, 32 - bls .L2760 - str wzr, [x0,376] + bls .L2839 + str wzr, [x0,-136] bl l2p_flush bl FtlVpcTblFlush -.L2760: +.L2839: mov w0, 0 -.L2746: +.L2825: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldr x23, [sp,48] @@ -17604,95 +18417,94 @@ FtlGcFreeTempBlock: stp x25, x26, [sp,64] ldr w3, [x2,1400] ldrh w1, [x2,818] - cbnz w3, .L2797 + cbnz w3, .L2876 ldrh w20, [x2,3704] mov w4, 65535 cmp w20, w4 - bne .L2765 -.L2774: - add x20, x19, :lo12:.LANCHOR2 - adrp x21, .LANCHOR4 - add x22, x21, :lo12:.LANCHOR4 + bne .L2844 +.L2853: + add x21, x19, :lo12:.LANCHOR2 + adrp x20, .LANCHOR4 + add x22, x20, :lo12:.LANCHOR4 mov w0, 65535 - add x23, x20, 3704 - ldrh w1, [x20,3704] - str wzr, [x22,168] + add x23, x21, 3704 + ldrh w1, [x21,3704] + str wzr, [x22,4008] cmp w1, w0 - beq .L2797 + beq .L2876 bl FtlCacheWriteBack mov w26, 12 ldrb w0, [x23,7] - ldrh w3, [x20,818] - ldr x1, [x20,1184] - ldrh w2, [x20,3704] + ldrh w3, [x21,818] + ldr x1, [x21,1184] + ldrh w2, [x21,3704] mul w0, w0, w3 strh w0, [x1,x2,lsl 1] - ldrh w1, [x22,178] + ldrh w1, [x22,4018] mov w22, 0 - ldr w0, [x20,880] + ldr w0, [x21,880] add w0, w1, w0 - str w0, [x20,880] - b .L2775 -.L2765: - cbz w0, .L2768 + str w0, [x21,880] + b .L2854 +.L2844: + cbz w0, .L2847 adrp x0, .LANCHOR1 add x0, x0, :lo12:.LANCHOR1 ldrh w5, [x0,3068] cmp w5, w4 - beq .L2769 -.L2770: + beq .L2848 +.L2849: mov w1, 2 - b .L2768 -.L2769: + b .L2847 +.L2848: strh w3, [x0,3068] ldrh w0, [x2,3600] cmp w0, 17 - bhi .L2770 -.L2768: + bhi .L2849 +.L2847: add x21, x19, :lo12:.LANCHOR2 add x0, x21, 3704 bl FtlGcScanTempBlk str w0, [x29,92] cmn w0, #1 - beq .L2771 + beq .L2850 ubfiz x20, x20, 1, 16 ldr x1, [x21,1168] ldrh w0, [x1,x20] cmp w0, 4 - bls .L2772 + bls .L2851 sub w0, w0, #5 strh w0, [x1,x20] mov w0, 1 bl FtlEctTblFlush -.L2772: +.L2851: adrp x0, .LANCHOR4 - add x1, x0, :lo12:.LANCHOR4 - mov x20, x0 - ldr w1, [x1,168] - cbnz w1, .L2773 - add x19, x19, :lo12:.LANCHOR2 - ldr w0, [x19,4064] + add x1, x0, :lo12:.LANCHOR4 + mov x19, x0 + ldr w2, [x1,4008] + cbnz w2, .L2852 + ldr w0, [x1,3552] add w0, w0, 1 - str w0, [x19,4064] + str w0, [x1,3552] ldr w0, [x29,92] lsr w0, w0, 10 bl FtlBbmMapBadBlock bl FtlBbmTblFlush -.L2773: - add x0, x20, :lo12:.LANCHOR4 - str wzr, [x0,168] +.L2852: + add x0, x19, :lo12:.LANCHOR4 + str wzr, [x0,4008] mov w0, 1 - b .L2764 -.L2771: + b .L2843 +.L2850: adrp x0, .LANCHOR1+3068 mov w1, 65535 ldrh w2, [x0,#:lo12:.LANCHOR1+3068] mov w0, 1 cmp w2, w1 - bne .L2764 - b .L2774 -.L2778: - ldr x25, [x20,984] + bne .L2843 + b .L2853 +.L2857: + ldr x25, [x21,984] add x1, x29, 92 umull x24, w22, w26 mov w2, 0 @@ -17702,7 +18514,7 @@ FtlGcFreeTempBlock: ldr w0, [x29,92] ldr w1, [x25,x24] cmp w0, w1 - bne .L2776 + bne .L2855 lsr x0, x0, 10 bl P2V_block_in_plane mov w24, w0 @@ -17711,92 +18523,93 @@ FtlGcFreeTempBlock: mov w2, 1 bl log2phys mov w0, w24 -.L2796: +.L2875: bl decrement_vpc_count -.L2777: +.L2856: add w22, w22, 1 uxth w22, w22 -.L2775: - add x0, x21, :lo12:.LANCHOR4 - ldrh w0, [x0,178] +.L2854: + add x0, x20, :lo12:.LANCHOR4 + ldrh w0, [x0,4018] cmp w0, w22 - bhi .L2778 - b .L2798 -.L2776: + bhi .L2857 + b .L2877 +.L2855: ldr w1, [x23,4] cmp w0, w1 - beq .L2777 - ldrh w0, [x20,3704] - b .L2796 -.L2798: + beq .L2856 + ldrh w0, [x21,3704] + b .L2875 +.L2877: mov w0, -1 - adrp x20, .LANCHOR0 + adrp x21, .LANCHOR0 bl decrement_vpc_count - add x0, x20, :lo12:.LANCHOR0 + add x0, x21, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L2779 + cbz w0, .L2858 add x1, x19, :lo12:.LANCHOR2 - adrp x0, .LC134 - add x0, x0, :lo12:.LC134 + adrp x0, .LC154 + add x0, x0, :lo12:.LC154 ldrh w1, [x1,3704] bl printk -.L2779: +.L2858: add x1, x19, :lo12:.LANCHOR2 ldrh w0, [x1,3704] ldr x1, [x1,1184] ubfiz x2, x0, 1, 16 ldrh w1, [x1,x2] - cbz w1, .L2780 + cbz w1, .L2859 bl INSERT_DATA_LIST - b .L2781 -.L2780: + b .L2860 +.L2859: bl INSERT_FREE_LIST -.L2781: +.L2860: add x22, x19, :lo12:.LANCHOR2 - add x21, x21, :lo12:.LANCHOR4 + add x23, x20, :lo12:.LANCHOR4 mov w0, -1 - strh wzr, [x21,178] + strh wzr, [x23,4018] strh w0, [x22,3704] - strh wzr, [x21,176] + strh wzr, [x23,4016] bl l2p_flush bl FtlVpcTblFlush ldr w0, [x22,652] - cbz w0, .L2782 + cbz w0, .L2861 ldr w0, [x22,920] cmp w0, 29 - bhi .L2782 - ldrh w0, [x22,3916] + bhi .L2861 + ldrh w0, [x23,3404] ldrh w1, [x22,3600] cmp w1, w0 - bcs .L2783 + bcs .L2862 lsl w0, w0, 1 strh w0, [x22,952] -.L2783: - add x19, x19, :lo12:.LANCHOR2 +.L2862: + add x20, x20, :lo12:.LANCHOR4 mov w0, -1 - strh w0, [x19,3920] -.L2797: + strh w0, [x20,3408] +.L2876: mov w0, 0 - b .L2764 -.L2782: + b .L2843 +.L2861: + add x20, x20, :lo12:.LANCHOR4 add x19, x19, :lo12:.LANCHOR2 - ldrh w1, [x19,3916] + ldrh w1, [x20,3404] ldrh w0, [x19,3600] add w2, w1, w1, lsl 1 cmp w0, w2, lsr 2 - ble .L2797 - add x20, x20, :lo12:.LANCHOR0 + ble .L2876 + add x21, x21, :lo12:.LANCHOR0 mov w0, -1 - strh w0, [x19,3920] - ldrb w0, [x20,136] - cbz w0, .L2784 + strh w0, [x20,3408] + ldrb w0, [x21,136] + cbz w0, .L2863 sub w1, w1, #2 strh w1, [x19,952] - b .L2797 -.L2784: + b .L2876 +.L2863: mov w1, 20 strh w1, [x19,952] -.L2764: +.L2843: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -17820,14 +18633,14 @@ FtlGcPageRecovery: ldrh w1, [x19,3706] ldrh w0, [x19,818] cmp w1, w0 - bcc .L2799 + bcc .L2878 add x0, x19, 3752 bl FtlMapBlkWriteDumpData mov w0, 0 bl FtlGcFreeTempBlock - adrp x0, .LANCHOR4+168 - str wzr, [x0,#:lo12:.LANCHOR4+168] -.L2799: + adrp x0, .LANCHOR4+4008 + str wzr, [x0,#:lo12:.LANCHOR4+4008] +.L2878: ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 ret @@ -17837,11 +18650,11 @@ FtlGcPageRecovery: .type FtlPowerLostRecovery, %function FtlPowerLostRecovery: stp x29, x30, [sp, -32]! - adrp x0, .LANCHOR4+224 + adrp x0, .LANCHOR4+4064 add x29, sp, 0 stp x19, x20, [sp,16] adrp x19, .LANCHOR2 - str wzr, [x0,#:lo12:.LANCHOR4+224] + str wzr, [x0,#:lo12:.LANCHOR4+4064] add x19, x19, :lo12:.LANCHOR2 add x20, x19, 3608 add x19, x19, 3656 @@ -17875,22 +18688,22 @@ FtlSysBlkInit: add x0, x19, :lo12:.LANCHOR4 add x21, x20, :lo12:.LANCHOR2 str x23, [sp,48] - strh w1, [x0,218] - strh wzr, [x0,220] + strh w1, [x0,4058] + strh wzr, [x0,4060] ldrh w0, [x21,752] bl FtlFreeSysBlkQueueInit bl FtlScanSysBlk ldrh w1, [x21,3896] mov w0, 65535 cmp w1, w0 - bne .L2803 -.L2805: + bne .L2882 +.L2884: mov w23, -1 - b .L2804 -.L2803: + b .L2883 +.L2882: bl FtlLoadSysInfo mov w23, w0 - cbnz w0, .L2805 + cbnz w0, .L2884 bl FtlLoadMapInfo bl FtlLoadVonderInfo bl Ftl_load_ext_data @@ -17903,25 +18716,25 @@ FtlSysBlkInit: ldrh w2, [x21,858] mov x1, 0 ldr x0, [x21,1264] -.L2806: +.L2885: cmp w1, w2 mov w3, w1 - bge .L2810 + bge .L2889 add x4, x0, x1, lsl 4 add x1, x1, 1 ldr w4, [x4,4] - tbz w4, #31, .L2806 -.L2810: + tbz w4, #31, .L2885 +.L2889: add x0, x20, :lo12:.LANCHOR2 cmp w3, w2 ldrh w1, [x0,3548] add w1, w1, 1 strh w1, [x0,3548] - blt .L2807 + blt .L2886 add x19, x19, :lo12:.LANCHOR4 - ldrh w0, [x19,220] - cbz w0, .L2811 -.L2807: + ldrh w0, [x19,4060] + cbz w0, .L2890 +.L2886: add x19, x20, :lo12:.LANCHOR2 add x22, x19, 3608 add x21, x19, 3656 @@ -17961,18 +18774,18 @@ FtlSysBlkInit: bl l2p_flush bl FtlVpcTblFlush bl FtlVpcTblFlush -.L2811: +.L2890: add x19, x20, :lo12:.LANCHOR2 mov w0, 65535 add x22, x19, 3608 ldrh w1, [x19,3608] cmp w1, w0 - beq .L2812 + beq .L2891 ldrh w0, [x19,3612] - cbnz w0, .L2812 + cbnz w0, .L2891 ldrh w0, [x19,3660] add x21, x19, 3656 - cbnz w0, .L2812 + cbnz w0, .L2891 bl FtlVpcTblFlush ldrh w0, [x19,3608] bl FtlGcRefreshOpenBlock @@ -17984,13 +18797,13 @@ FtlSysBlkInit: bl allocate_new_data_superblock add x0, x19, 3824 bl FtlMapBlkWriteDumpData -.L2812: +.L2891: add x20, x20, :lo12:.LANCHOR2 ldrh w0, [x20,3548] and w0, w0, 31 - cbnz w0, .L2804 + cbnz w0, .L2883 bl FtlVpcCheckAndModify -.L2804: +.L2883: mov w0, w23 ldr x23, [sp,48] ldp x19, x20, [sp,16] @@ -18002,14 +18815,15 @@ FtlSysBlkInit: .global FtlLowFormat .type FtlLowFormat, %function FtlLowFormat: - stp x29, x30, [sp, -48]! + stp x29, x30, [sp, -64]! add x29, sp, 0 stp x19, x20, [sp,16] adrp x19, .LANCHOR2 + str x23, [sp,48] add x20, x19, :lo12:.LANCHOR2 stp x21, x22, [sp,32] ldr w21, [x20,1400] - cbnz w21, .L2820 + cbnz w21, .L2899 ldrh w2, [x20,856] mov w1, w21 ldr x0, [x20,1248] @@ -18025,15 +18839,15 @@ FtlLowFormat: str w21, [x20,876] bl FtlFreeSysBlkQueueInit bl FtlLoadBbt - cbz w0, .L2821 + cbz w0, .L2900 bl FtlMakeBbt -.L2821: +.L2900: mov w0, 0 -.L2822: +.L2901: add x1, x19, :lo12:.LANCHOR2 ldrh w2, [x1,824] cmp w0, w2, lsl 7 - bge .L2849 + bge .L2928 ubfiz x3, x0, 2, 16 ldr x4, [x1,1088] mvn w2, w0 @@ -18045,15 +18859,15 @@ FtlLowFormat: movk w1, 0xa0f, lsl 16 uxth w0, w0 str w1, [x2,x3] - b .L2822 -.L2849: + b .L2901 +.L2928: ldrh w21, [x1,756] mov w20, 0 -.L2824: +.L2903: add x22, x19, :lo12:.LANCHOR2 ldrh w0, [x22,758] cmp w0, w21 - bls .L2850 + bls .L2929 mov w0, w21 mov w1, 1 add w21, w21, 1 @@ -18061,17 +18875,17 @@ FtlLowFormat: add w0, w20, w0 uxth w21, w21 uxth w20, w0 - b .L2824 -.L2850: + b .L2903 +.L2929: ldrh w0, [x22,748] sub w1, w20, #3 cmp w1, w0, lsl 1 - bge .L2826 -.L2830: + bge .L2905 +.L2909: mov w20, 0 mov w21, w20 - b .L2827 -.L2826: + b .L2906 +.L2905: udiv w20, w20, w0 ldr w0, [x22,852] add w0, w20, w0 @@ -18079,22 +18893,22 @@ FtlLowFormat: ldrh w0, [x22,752] bl FtlFreeSysBlkQueueInit ldrh w20, [x22,756] -.L2828: +.L2907: add x0, x19, :lo12:.LANCHOR2 ldrh w0, [x0,758] cmp w0, w20 - bls .L2830 + bls .L2909 mov w0, w20 mov w1, 1 add w20, w20, 1 bl FtlLowFormatEraseBlock uxth w20, w20 - b .L2828 -.L2827: - add x2, x19, :lo12:.LANCHOR2 - ldrh w0, [x2,756] - cmp w0, w21 - bls .L2851 + b .L2907 +.L2906: + add x0, x19, :lo12:.LANCHOR2 + ldrh w1, [x0,756] + cmp w1, w21 + bls .L2930 mov w0, w21 mov w1, 0 add w21, w21, 1 @@ -18102,114 +18916,119 @@ FtlLowFormat: add w0, w20, w0 uxth w21, w21 uxth w20, w0 - b .L2827 -.L2851: - ldrh w3, [x2,748] - ldr w1, [x2,760] - ldrh w0, [x2,758] - str w0, [x2,944] - udiv w4, w1, w3 - str w4, [x2,1396] - ubfx x5, x4, 5, 16 - add w0, w5, 36 - strh w0, [x2,3916] - mov w0, 24 - mul w0, w3, w0 - cmp w20, w0 - ble .L2832 + b .L2906 +.L2930: + ldrh w1, [x0,758] + adrp x21, .LANCHOR4 + ldrh w2, [x0,748] + add x6, x21, :lo12:.LANCHOR4 + str w1, [x0,944] + ldr w1, [x0,760] + udiv w3, w1, w2 + str w3, [x0,1396] + ubfx x5, x3, 5, 16 + add w4, w5, 36 + strh w4, [x6,3404] + mov w4, 24 + mul w4, w2, w4 + cmp w20, w4 + ble .L2911 sub w1, w1, w20 - udiv w1, w1, w3 - str w1, [x2,1396] + udiv w1, w1, w2 + str w1, [x0,1396] lsr w1, w1, 5 add w1, w1, 24 - strh w1, [x2,3916] -.L2832: - add x2, x19, :lo12:.LANCHOR2 - ldr w0, [x2,652] + strh w1, [x6,3404] +.L2911: + add x0, x19, :lo12:.LANCHOR2 + ldr w0, [x0,652] cmp w0, 1 - bne .L2833 - ldrh w1, [x2,3916] - udiv w0, w20, w3 - add w0, w1, w0 - add w0, w1, w0, asr 2 - strh w0, [x2,3916] -.L2833: - adrp x21, .LANCHOR0 - add x0, x21, :lo12:.LANCHOR0 + bne .L2912 + add x1, x21, :lo12:.LANCHOR4 + udiv w0, w20, w2 + ldrh w4, [x1,3404] + add w0, w4, w0 + add w0, w4, w0, asr 2 + strh w0, [x1,3404] +.L2912: + adrp x22, .LANCHOR0 + add x0, x22, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L2834 - add x1, x19, :lo12:.LANCHOR2 - udiv w0, w20, w3 - ldrh w2, [x1,3916] - add w0, w2, w0 - add w0, w2, w0, asr 2 - strh w0, [x1,3916] -.L2834: - add x0, x19, :lo12:.LANCHOR2 - ldrh w1, [x0,810] - cbz w1, .L2836 - ldrh w2, [x0,3916] - add w2, w2, w1, lsr 1 - strh w2, [x0,3916] - mul w2, w1, w3 - cmp w2, w20 - ble .L2836 + cbz w0, .L2913 + add x1, x21, :lo12:.LANCHOR4 + udiv w0, w20, w2 + ldrh w4, [x1,3404] + add w0, w4, w0 + add w0, w4, w0, asr 2 + strh w0, [x1,3404] +.L2913: + add x6, x19, :lo12:.LANCHOR2 + ldrh w1, [x6,810] + cbz w1, .L2915 + add x0, x21, :lo12:.LANCHOR4 + ldrh w4, [x0,3404] + add w4, w4, w1, lsr 1 + strh w4, [x0,3404] + mul w4, w1, w2 + cmp w4, w20 + ble .L2915 add w1, w1, 32 - str w4, [x0,1396] + str w3, [x6,1396] add w1, w5, w1 - strh w1, [x0,3916] -.L2836: + strh w1, [x0,3404] +.L2915: add x19, x19, :lo12:.LANCHOR2 - add x21, x21, :lo12:.LANCHOR0 - add x20, x19, 3608 - mov w22, -1 + add x20, x21, :lo12:.LANCHOR4 + add x22, x22, :lo12:.LANCHOR0 + mov w23, -1 + ldrh w0, [x20,3404] ldr w1, [x19,1396] - ldrh w0, [x19,3916] sub w0, w1, w0 ldrh w1, [x19,818] - mul w0, w0, w3 - str w0, [x19,3912] + mul w0, w0, w2 + str w0, [x20,3400] mul w0, w0, w1 ldrh w1, [x19,824] str w0, [x19,1396] mul w0, w0, w1 - str w0, [x21,4048] + str w0, [x22,4048] bl FtlBbmTblFlush ldrh w2, [x19,758] mov w1, 0 ldr x0, [x19,1184] lsl w2, w2, 1 bl ftl_memset - str wzr, [x19,3892] + strh w23, [x20,3408] + strh wzr, [x20,3410] mov w0, 1 + strb wzr, [x20,3414] + mov w1, 255 + strb wzr, [x20,3416] + add x20, x19, 3608 ldrh w2, [x19,756] strb w0, [x20,8] - mov w1, 255 - ldr x0, [x21,16] + ldr x0, [x22,16] lsr w2, w2, 3 - strh w22, [x19,3920] - strh wzr, [x19,3922] - strb wzr, [x19,3926] - strb wzr, [x19,3928] + str wzr, [x19,3892] strh wzr, [x20,2] strb wzr, [x20,6] strh wzr, [x19,3608] bl ftl_memset -.L2838: +.L2917: mov x0, x20 bl make_superblock ldrb w0, [x20,7] - cbnz w0, .L2839 + cbnz w0, .L2918 ldrh w1, [x20] ldr x0, [x19,1184] - strh w22, [x0,x1,lsl 1] + strh w23, [x0,x1,lsl 1] ldrh w0, [x20] add w0, w0, 1 strh w0, [x20] - b .L2838 -.L2839: + b .L2917 +.L2918: ldr w0, [x19,872] - mov w21, -1 + mov w22, -1 str w0, [x20,12] add w0, w0, 1 ldrh w1, [x20] @@ -18226,20 +19045,21 @@ FtlLowFormat: strh w1, [x19,3656] mov w1, 1 strb w1, [x19,3664] -.L2840: +.L2919: mov x0, x20 bl make_superblock ldrb w0, [x20,7] - cbnz w0, .L2841 + cbnz w0, .L2920 ldrh w1, [x20] ldr x0, [x19,1184] - strh w21, [x0,x1,lsl 1] + strh w22, [x0,x1,lsl 1] ldrh w0, [x20] add w0, w0, 1 strh w0, [x20] - b .L2840 -.L2841: + b .L2919 +.L2920: ldr w0, [x19,872] + add x21, x21, :lo12:.LANCHOR4 str w0, [x20,12] add w0, w0, 1 ldrh w1, [x20] @@ -18251,7 +19071,7 @@ FtlLowFormat: strh w20, [x19,3704] bl FtlFreeSysBlkQueueOut strh w0, [x19,3896] - ldr w0, [x19,3912] + ldr w0, [x21,3400] strh w0, [x19,3902] ldr w0, [x19,872] str w0, [x19,3904] @@ -18261,15 +19081,16 @@ FtlLowFormat: str w0, [x19,872] bl FtlVpcTblFlush bl FtlSysBlkInit - cbnz w0, .L2820 + cbnz w0, .L2899 adrp x0, .LANCHOR1+3064 mov w1, 1 str w1, [x0,#:lo12:.LANCHOR1+3064] -.L2820: +.L2899: mov w0, 0 + ldr x23, [sp,48] ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] - ldp x29, x30, [sp], 48 + ldp x29, x30, [sp], 64 ret .size FtlLowFormat, .-FtlLowFormat .align 2 @@ -18282,24 +19103,24 @@ FtlReInitForSDUpdata: adrp x19, .LANCHOR0 add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,136] - cbz w0, .L2853 -.L2855: + cbz w0, .L2932 +.L2934: mov w0, 0 - b .L2854 -.L2853: + b .L2933 +.L2932: adrp x0, RK29_NANDC_REG_BASE ldr x0, [x0,#:lo12:RK29_NANDC_REG_BASE] bl FlashInit - cbnz w0, .L2855 + cbnz w0, .L2934 bl FlashLoadFactorBbt - cbz w0, .L2856 + cbz w0, .L2935 bl FlashMakeFactorBbt -.L2856: +.L2935: adrp x20, .LANCHOR2 add x0, x20, :lo12:.LANCHOR2 ldr x0, [x0,688] bl FlashReadIdbDataRaw - cbz w0, .L2857 + cbz w0, .L2936 mov w1, 0 mov w2, 16 add x0, x29, 32 @@ -18308,43 +19129,43 @@ FtlReInitForSDUpdata: ldr w2, [x29,32] mov w1, w0 mov w4, 1 -.L2859: +.L2938: lsl w3, w4, w1 add w1, w1, 1 tst w3, w2 cset w3, ne cmp w1, 16 add w0, w0, w3 - bne .L2859 + bne .L2938 cmp w0, 6 - bhi .L2860 + bhi .L2939 add x0, x19, :lo12:.LANCHOR0 - b .L2882 -.L2860: + b .L2961 +.L2939: mov w1, 0 mov w4, 1 -.L2863: +.L2942: lsl w3, w4, w1 add w1, w1, 1 tst w3, w2 cset w3, ne cmp w1, 24 add w0, w0, w3 - bne .L2863 + bne .L2942 cmp w0, 17 add x0, x19, :lo12:.LANCHOR0 - bls .L2882 + bls .L2961 mov w1, 36 -.L2882: +.L2961: strb w1, [x0,25] add x0, x19, :lo12:.LANCHOR0 ldrb w1, [x0,25] strh w1, [x0,4042] -.L2857: - adrp x0, .LC45 - adrp x1, .LC119 - add x1, x1, :lo12:.LC119 - add x0, x0, :lo12:.LC45 +.L2936: + adrp x0, .LC47 + adrp x1, .LC140 + add x1, x1, :lo12:.LC140 + add x0, x0, :lo12:.LC47 add x20, x20, :lo12:.LANCHOR2 bl printk add x0, x19, :lo12:.LANCHOR0 @@ -18354,25 +19175,25 @@ FtlReInitForSDUpdata: bl FtlVariablesInit ldrh w0, [x20,752] bl FtlFreeSysBlkQueueInit -.L2865: +.L2944: bl FtlLoadBbt - cbz w0, .L2866 -.L2884: + cbz w0, .L2945 +.L2963: bl FtlLowFormat cmp w19, 3 - bhi .L2885 + bhi .L2964 add w19, w19, 1 - b .L2865 -.L2885: + b .L2944 +.L2964: mov w0, -1 - b .L2854 -.L2866: + b .L2933 +.L2945: bl FtlSysBlkInit - cbnz w0, .L2884 + cbnz w0, .L2963 adrp x1, .LANCHOR1+3064 mov w2, 1 str w2, [x1,#:lo12:.LANCHOR1+3064] -.L2854: +.L2933: ldp x19, x20, [sp,16] ldp x29, x30, [sp], 48 ret @@ -18381,83 +19202,86 @@ FtlReInitForSDUpdata: .global Ftl_gc_temp_data_write_back .type Ftl_gc_temp_data_write_back, %function Ftl_gc_temp_data_write_back: - adrp x0, .LANCHOR0+136 stp x29, x30, [sp, -64]! add x29, sp, 0 - ldrb w0, [x0,#:lo12:.LANCHOR0+136] stp x19, x20, [sp,16] - stp x21, x22, [sp,32] - str x23, [sp,48] - adrp x21, .LANCHOR4 adrp x19, .LANCHOR2 - cbz w0, .L2887 - add x0, x21, :lo12:.LANCHOR4 - ldr w0, [x0,144] - tbz x0, 0, .L2887 + str x23, [sp,48] add x0, x19, :lo12:.LANCHOR2 - ldrh w0, [x0,3708] - cbz w0, .L2887 -.L2892: + stp x21, x22, [sp,32] + ldr w1, [x0,1400] + cbz w1, .L2966 +.L2969: mov w0, 0 - b .L2888 -.L2887: + b .L2967 +.L2966: + adrp x1, .LANCHOR0+136 + adrp x22, .LANCHOR4 + ldrb w1, [x1,#:lo12:.LANCHOR0+136] + cbz w1, .L2968 + add x1, x22, :lo12:.LANCHOR4 + ldr w1, [x1,3984] + tbz x1, 0, .L2968 + ldrh w0, [x0,3708] + cbnz w0, .L2969 +.L2968: add x0, x19, :lo12:.LANCHOR2 - add x1, x21, :lo12:.LANCHOR4 + add x1, x22, :lo12:.LANCHOR4 mov w2, 0 - mov w20, 0 + mov w21, 0 mov w3, w2 mov w23, 56 ldr x0, [x0,1000] - ldr w1, [x1,144] + ldr w1, [x1,3984] bl FlashProgPages -.L2889: - add x22, x21, :lo12:.LANCHOR4 - ldr w1, [x22,144] - cmp w20, w1 - bcs .L2903 - add x0, x19, :lo12:.LANCHOR2 - umull x1, w20, w23 - ldr x2, [x0,1000] - add x3, x2, x1 - ldr w2, [x2,x1] +.L2970: + add x20, x22, :lo12:.LANCHOR4 + ldr w1, [x20,3984] + cmp w21, w1 + bcs .L2980 + add x1, x19, :lo12:.LANCHOR2 + umull x0, w21, w23 + ldr x2, [x1,1000] + add x3, x2, x0 + ldr w2, [x2,x0] cmn w2, #1 - bne .L2890 - ldrh w4, [x0,3704] - ldr x3, [x0,1184] + bne .L2971 + ldrh w4, [x1,3704] + ldr x3, [x1,1184] strh wzr, [x3,x4,lsl 1] - strh w2, [x0,3704] - ldr w2, [x0,4064] + strh w2, [x1,3704] + ldr x1, [x1,1000] + ldr w2, [x20,3552] + add x0, x1, x0 add w2, w2, 1 - str w2, [x0,4064] - ldr x0, [x0,1000] - add x1, x0, x1 - ldr w0, [x1,4] + str w2, [x20,3552] + ldr w0, [x0,4] lsr w0, w0, 10 bl FtlBbmMapBadBlock bl FtlBbmTblFlush bl FtlGcPageVarInit - b .L2902 -.L2890: + b .L2979 +.L2971: ldr x2, [x3,16] - add w20, w20, 1 + add w21, w21, 1 ldr w1, [x3,4] - uxth w20, w20 + uxth w21, w21 ldr w0, [x2,12] ldr w2, [x2,8] bl FtlGcUpdatePage - b .L2889 -.L2903: + b .L2970 +.L2980: add x19, x19, :lo12:.LANCHOR2 ldr x0, [x19,1000] bl FtlGcBufFree - str wzr, [x22,144] + str wzr, [x20,3984] ldrh w0, [x19,3708] - cbnz w0, .L2892 + cbnz w0, .L2969 mov w0, 1 bl FtlGcFreeTempBlock -.L2902: +.L2979: mov w0, 1 -.L2888: +.L2967: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldr x23, [sp,48] @@ -18477,10 +19301,10 @@ Ftl_get_new_temp_ppa: ldrh w2, [x0,3704] mov w0, 65535 cmp w2, w0 - beq .L2905 + beq .L2982 ldrh w0, [x1,4] - cbnz w0, .L2906 -.L2905: + cbnz w0, .L2983 +.L2982: bl FtlCacheWriteBack mov w0, 0 bl FtlGcFreeTempBlock @@ -18490,13 +19314,13 @@ Ftl_get_new_temp_ppa: bl allocate_data_superblock adrp x0, .LANCHOR4 add x0, x0, :lo12:.LANCHOR4 - strh wzr, [x0,176] - strh wzr, [x0,178] + strh wzr, [x0,4016] + strh wzr, [x0,4018] bl l2p_flush mov w0, 0 bl FtlEctTblFlush bl FtlVpcTblFlush -.L2906: +.L2983: add x0, x19, :lo12:.LANCHOR2 add x0, x0, 3704 bl get_new_active_ppa @@ -18508,7 +19332,7 @@ Ftl_get_new_temp_ppa: .global ftl_read .type ftl_read, %function ftl_read: - stp x29, x30, [sp, -176]! + stp x29, x30, [sp, -192]! cmp w0, 16 add x29, sp, 0 stp x19, x20, [sp,16] @@ -18519,81 +19343,86 @@ ftl_read: mov w20, w1 mov w28, w2 mov x25, x3 - bne .L2908 + bne .L2985 add w0, w1, 256 mov w1, w2 mov x2, x3 bl FtlVendorPartRead - b .L2909 -.L2908: + b .L2986 +.L2985: add w0, w1, w2 - str w0, [x29,156] + str w0, [x29,172] adrp x0, .LANCHOR0+4048 - ldr w2, [x29,156] + ldr w2, [x29,172] ldr w1, [x0,#:lo12:.LANCHOR0+4048] mov w0, -1 cmp w2, w1 - bhi .L2909 + bhi .L2986 adrp x19, .LANCHOR2 + adrp x21, .LANCHOR4 + add x0, x19, :lo12:.LANCHOR2 sub w24, w2, #1 - add x1, x19, :lo12:.LANCHOR2 - ldrh w0, [x1,824] - udiv w27, w20, w0 - udiv w24, w24, w0 - adrp x0, .LANCHOR4 - add x0, x0, :lo12:.LANCHOR4 + add x2, x21, :lo12:.LANCHOR4 + ldrh w1, [x0,824] + udiv w27, w20, w1 + udiv w24, w24, w1 + ldr w1, [x2,3972] + add w1, w28, w1 sub w23, w24, w27 + str w1, [x2,3972] add w23, w23, 1 - ldr w2, [x0,132] - add w2, w28, w2 - str w2, [x0,132] - ldr w0, [x1,900] - add w0, w23, w0 - str w0, [x1,900] - mov w0, w27 + ldr w1, [x0,900] + add w1, w23, w1 + str w1, [x0,900] mov w1, w24 + mov w0, w27 bl FtlCacheMetchLpa - cbz w0, .L2910 + mov x1, x21 + cbz w0, .L2987 + str x21, [x29,160] bl FtlCacheWriteBack -.L2910: + ldr x1, [x29,160] +.L2987: mov w26, 0 + add x0, x1, :lo12:.LANCHOR4 mov w21, w27 - str w26, [x29,152] + str w26, [x29,168] mov w22, w26 - str w26, [x29,140] -.L2911: - cbz w23, .L2952 + str w26, [x29,156] + str x0, [x29,112] +.L2988: + cbz w23, .L3029 mov w0, w21 - add x1, x29, 172 + add x1, x29, 188 mov w2, 0 bl log2phys - ldr w3, [x29,172] + ldr w3, [x29,188] cmn w3, #1 - bne .L2950 + bne .L3027 mov w3, 0 -.L2912: +.L2989: add x0, x19, :lo12:.LANCHOR2 ldrh w0, [x0,824] cmp w3, w0 - bcs .L2916 + bcs .L2993 madd w0, w21, w0, w3 cmp w0, w20 - bcc .L2914 - ldr w1, [x29,156] + bcc .L2991 + ldr w1, [x29,172] cmp w0, w1 - bcs .L2914 + bcs .L2991 sub w0, w0, w20 mov w1, 0 ubfiz x0, x0, 9, 23 mov w2, 512 add x0, x25, x0 - str x3, [x29,144] + str x3, [x29,160] bl ftl_memset - ldr x3, [x29,144] -.L2914: + ldr x3, [x29,160] +.L2991: add w3, w3, 1 - b .L2912 -.L2950: + b .L2989 +.L3027: add x2, x19, :lo12:.LANCHOR2 mov w0, 56 cmp w21, w27 @@ -18602,40 +19431,40 @@ ftl_read: add x0, x0, x1 str w3, [x0,4] ldrh w0, [x2,824] - bne .L2917 + bne .L2994 ldr x3, [x2,992] ldr x2, [x2,1088] add x3, x3, x1 str x2, [x3,8] udiv w2, w20, w0 msub w2, w2, w0, w20 - str w2, [x29,112] + str w2, [x29,128] sub w2, w0, w2 cmp w2, w28 csel w2, w2, w28, ls - str w2, [x29,152] + str w2, [x29,168] cmp w2, w0 - bne .L2918 + bne .L2995 str x25, [x3,8] - b .L2918 -.L2917: + b .L2995 +.L2994: cmp w21, w24 - bne .L2919 + bne .L2996 ldr x3, [x2,992] ldr x2, [x2,1096] add x3, x3, x1 - ldr w4, [x29,156] + ldr w4, [x29,172] str x2, [x3,8] mul w2, w21, w0 sub w26, w4, w2 cmp w26, w0 - bne .L2918 + bne .L2995 sub w2, w2, w20 ubfiz x2, x2, 9, 23 add x2, x25, x2 str x2, [x3,8] - b .L2918 -.L2919: + b .L2995 +.L2996: ldr x2, [x2,992] mul w0, w21, w0 add x2, x2, x1 @@ -18643,7 +19472,7 @@ ftl_read: ubfiz x0, x0, 9, 23 add x0, x25, x0 str x0, [x2,8] -.L2918: +.L2995: add x2, x19, :lo12:.LANCHOR2 ldr x0, [x2,992] add x1, x0, x1 @@ -18655,35 +19484,35 @@ ftl_read: and x0, x0, 4294967292 add x0, x2, x0 str x0, [x1,16] -.L2916: +.L2993: subs w23, w23, #1 add w21, w21, 1 - beq .L2920 + beq .L2997 add x0, x19, :lo12:.LANCHOR2 ldrh w0, [x0,748] cmp w22, w0, lsl 3 - bne .L2911 -.L2920: - cbz w22, .L2911 + bne .L2988 +.L2997: + cbz w22, .L2988 add x0, x19, :lo12:.LANCHOR2 mov w1, w22 mov w2, 0 ldr x0, [x0,992] bl FlashReadPages - str xzr, [x29,144] - ldr x0, [x29,112] + str xzr, [x29,160] + ldr x0, [x29,128] ubfiz x0, x0, 9, 23 - str x0, [x29,128] - ldr w0, [x29,152] + str x0, [x29,144] + ldr w0, [x29,168] lsl w0, w0, 9 - str w0, [x29,136] + str w0, [x29,152] lsl w0, w26, 9 - str w0, [x29,108] -.L2922: - ldr w0, [x29,144] + str w0, [x29,124] +.L2999: + ldr w0, [x29,160] cmp w22, w0 - bls .L2953 - ldr x0, [x29,144] + bls .L3030 + ldr x0, [x29,160] add x2, x19, :lo12:.LANCHOR2 mov x1, 56 mul x3, x0, x1 @@ -18691,77 +19520,79 @@ ftl_read: add x0, x0, x3 ldr w1, [x0,24] cmp w1, w27 - bne .L2923 + bne .L3000 ldr x1, [x0,8] ldr x0, [x2,1088] cmp x1, x0 - bne .L2924 - ldr x2, [x29,128] + bne .L3001 + ldr x2, [x29,144] mov x0, x25 - str x3, [x29,96] + str x3, [x29,104] add x1, x1, x2 - ldr w2, [x29,136] - b .L2951 -.L2923: + ldr w2, [x29,152] + b .L3028 +.L3000: cmp w1, w24 - bne .L2924 + bne .L3001 ldr x1, [x0,8] ldr x0, [x2,1096] cmp x1, x0 - bne .L2924 + bne .L3001 ldrh w0, [x2,824] - ldr w2, [x29,108] - str x3, [x29,96] + ldr w2, [x29,124] + str x3, [x29,104] mul w0, w24, w0 sub w0, w0, w20 ubfiz x0, x0, 9, 23 add x0, x25, x0 -.L2951: +.L3028: bl ftl_memcpy - ldr x3, [x29,96] -.L2924: + ldr x3, [x29,104] +.L3001: add x0, x19, :lo12:.LANCHOR2 - ldr x1, [x0,992] - add x5, x1, x3 - ldr w4, [x1,x3] - cmn w4, #1 - bne .L2925 - ldr w2, [x0,4040] - str w4, [x29,140] - add w2, w2, 1 - str w2, [x0,4040] -.L2925: - ldr w0, [x1,x3] + ldr x0, [x0,992] + add x5, x0, x3 + ldr w2, [x0,x3] + cmn w2, #1 + bne .L3002 + ldr x1, [x29,112] + str w2, [x29,156] + add x4, x1, 3456 + ldr w1, [x1,3528] + add w1, w1, 1 + str w1, [x4,72] +.L3002: + ldr w0, [x0,x3] cmp w0, 256 - bne .L2926 + bne .L3003 ldr w0, [x5,4] lsr x0, x0, 10 bl P2V_block_in_plane bl FtlGcRefreshBlock -.L2926: - ldr x0, [x29,144] +.L3003: + ldr x0, [x29,160] add x0, x0, 1 - str x0, [x29,144] - b .L2922 -.L2953: + str x0, [x29,160] + b .L2999 +.L3030: mov w22, 0 - b .L2911 -.L2952: + b .L2988 +.L3029: add x19, x19, :lo12:.LANCHOR2 ldrh w0, [x19,958] - cbz w0, .L2929 + cbz w0, .L3006 mov w0, w23 mov w1, 1 bl ftl_do_gc -.L2929: - ldr w0, [x29,140] -.L2909: +.L3006: + ldr w0, [x29,156] +.L2986: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] ldp x25, x26, [sp,64] ldp x27, x28, [sp,80] - ldp x29, x30, [sp], 176 + ldp x29, x30, [sp], 192 ret .size ftl_read, .-ftl_read .align 2 @@ -18770,22 +19601,22 @@ ftl_read: FtlInit: stp x29, x30, [sp, -48]! mov w0, -1 - adrp x1, .LC119 + adrp x1, .LC140 add x29, sp, 0 str x21, [sp,32] adrp x21, .LANCHOR1 add x21, x21, :lo12:.LANCHOR1 - add x1, x1, :lo12:.LC119 + add x1, x1, :lo12:.LC140 stp x19, x20, [sp,16] adrp x19, .LANCHOR2 adrp x20, .LANCHOR0 str w0, [x21,3064] - adrp x0, .LANCHOR4+380 + adrp x0, .LANCHOR5-132 add x19, x19, :lo12:.LANCHOR2 add x20, x20, :lo12:.LANCHOR0 - str wzr, [x0,#:lo12:.LANCHOR4+380] - adrp x0, .LC45 - add x0, x0, :lo12:.LC45 + str wzr, [x0,#:lo12:.LANCHOR5-132] + adrp x0, .LC47 + add x0, x0, :lo12:.LC47 str wzr, [x19,1400] bl printk add x0, x20, 4016 @@ -18795,47 +19626,47 @@ FtlInit: ldrh w0, [x19,752] bl FtlFreeSysBlkQueueInit bl FtlLoadBbt - cbz w0, .L2955 - adrp x0, .LC135 - add x0, x0, :lo12:.LC135 - b .L2967 -.L2955: + cbz w0, .L3032 + adrp x0, .LC155 + add x0, x0, :lo12:.LC155 + b .L3044 +.L3032: bl FtlSysBlkInit - cbz w0, .L2957 - adrp x0, .LC136 - add x0, x0, :lo12:.LC136 -.L2967: + cbz w0, .L3034 + adrp x0, .LC156 + add x0, x0, :lo12:.LC156 +.L3044: adrp x1, .LANCHOR3 add x1, x1, :lo12:.LANCHOR3 - add x1, x1, 40 + add x1, x1, 96 bl printk - b .L2956 -.L2957: + b .L3033 +.L3034: mov w1, 1 str w1, [x21,3064] bl ftl_do_gc ldrh w0, [x19,3600] cmp w0, 15 - bhi .L2958 + bhi .L3035 mov w19, 1024 -.L2959: +.L3036: mov w0, 1 mov w1, w0 bl ftl_do_gc subs w19, w19, #1 - bne .L2959 - b .L2956 -.L2958: + bne .L3036 + b .L3033 +.L3035: ldrb w0, [x20,136] - cbz w0, .L2956 + cbz w0, .L3033 mov w19, 128 -.L2961: +.L3038: mov w0, 1 mov w1, w0 bl ftl_do_gc subs w19, w19, #1 - bne .L2961 -.L2956: + bne .L3038 +.L3033: mov w0, 0 ldr x21, [sp,32] ldp x19, x20, [sp,16] @@ -18862,31 +19693,33 @@ ftl_write: mov x22, x3 str x1, [x29,152] ldr w3, [x2,1400] - cbnz w3, .L2969 + cbnz w3, .L3046 cmp w4, 16 - bne .L2970 + bne .L3047 add w0, w20, 256 mov w1, w21 mov x2, x22 bl FtlVendorPartWrite - b .L2969 -.L2970: + b .L3046 +.L3047: adrp x0, .LANCHOR0+4048 add w24, w20, w21 ldr w1, [x0,#:lo12:.LANCHOR0+4048] mov w0, -1 cmp w24, w1 - bhi .L2969 - adrp x4, .LANCHOR4 + bhi .L3046 + adrp x5, .LANCHOR5 ldrh w1, [x2,824] - add x26, x4, :lo12:.LANCHOR4 + add x26, x5, :lo12:.LANCHOR5 sub w24, w24, #1 mov w0, 2048 - ldr w3, [x2,968] + adrp x4, .LANCHOR4 udiv w23, w20, w1 + add x3, x4, :lo12:.LANCHOR4 + str w0, [x26,-128] cmp w21, w1, lsl 1 - str w0, [x26,384] - str x4, [x29,144] + str x5, [x29,144] + str x4, [x29,112] udiv w0, w24, w1 str w0, [x29,200] sub w28, w0, w23 @@ -18894,12 +19727,13 @@ ftl_write: ldr w0, [x2,884] add w0, w25, w0 str w0, [x2,884] - ldr w0, [x26,128] + ldr w0, [x3,3968] add w0, w21, w0 - str w0, [x26,128] + str w0, [x3,3968] + ldr w3, [x2,968] cset w0, cs str w0, [x29,204] - cbz w3, .L2972 + cbz w3, .L3049 mov w0, 56 sub w3, w3, #1 umull x3, w3, w0 @@ -18907,13 +19741,13 @@ ftl_write: add x3, x0, x3 ldr w0, [x3,24] cmp w23, w0 - bne .L2973 + bne .L3050 ldr w0, [x2,892] add w0, w0, 1 str w0, [x2,892] - ldr w0, [x26,388] + ldr w0, [x26,-124] add w0, w0, 1 - str w0, [x26,388] + str w0, [x26,-124] msub w0, w23, w1, w20 sub w1, w1, w0 ubfiz x0, x0, 9, 23 @@ -18925,84 +19759,84 @@ ftl_write: mov w2, w25 mov x1, x22 bl ftl_memcpy - cbnz w28, .L2974 - ldr w0, [x26,388] + cbnz w28, .L3051 + ldr w0, [x26,-124] cmp w0, 2 - bgt .L2974 -.L3007: + bgt .L3051 +.L3084: mov w0, 0 - b .L2969 -.L2974: + b .L3046 +.L3051: add x22, x22, x25 sub w21, w21, w19 add w20, w20, w19 add w23, w23, 1 mov w25, w28 -.L2973: +.L3050: ldr x0, [x29,144] - add x0, x0, :lo12:.LANCHOR4 - str wzr, [x0,388] -.L2972: + add x0, x0, :lo12:.LANCHOR5 + str wzr, [x0,-124] +.L3049: ldr w1, [x29,200] mov w0, w23 bl FtlCacheMetchLpa - cbz w0, .L2975 + cbz w0, .L3052 bl FtlCacheWriteBack -.L2975: +.L3052: ldr x0, [x29,144] ldr x1, [x29,152] - add x0, x0, :lo12:.LANCHOR4 + add x0, x0, :lo12:.LANCHOR5 str w23, [x29,192] add x3, x1, :lo12:.LANCHOR2 add x19, x3, 3608 mov x24, x3 - str x19, [x0,368] - adrp x0, .LC137 - add x0, x0, :lo12:.LC137 + str x19, [x0,-144] + adrp x0, .LC157 + add x0, x0, :lo12:.LC157 str x19, [x29,176] - str x0, [x29,104] -.L2976: - cbz w25, .L3036 + str x0, [x29,96] +.L3053: + cbz w25, .L3113 ldrh w0, [x19,4] - cbnz w0, .L2977 + cbnz w0, .L3054 ldr x1, [x29,176] adrp x26, .LANCHOR1 cmp x19, x1 - bne .L2978 + bne .L3055 add x0, x24, 3656 ldrh w19, [x0,4] - cbnz w19, .L2979 + cbnz w19, .L3056 bl allocate_new_data_superblock add x0, x26, :lo12:.LANCHOR1 str w19, [x0,3072] -.L2979: +.L3056: ldr x0, [x29,176] add x26, x26, :lo12:.LANCHOR1 add x19, x24, 3656 bl allocate_new_data_superblock ldr w0, [x26,3072] - cbnz w0, .L2980 -.L2981: + cbnz w0, .L3057 +.L3058: ldr x19, [x29,176] - b .L2980 -.L2978: + b .L3057 +.L3055: add x26, x26, :lo12:.LANCHOR1 str w0, [x26,3072] ldr x0, [x29,176] ldrh w0, [x0,4] - cbnz w0, .L2981 + cbnz w0, .L3058 mov x0, x19 bl allocate_new_data_superblock -.L2980: +.L3057: ldrh w0, [x19,4] - cbnz w0, .L2982 + cbnz w0, .L3059 mov x0, x19 bl allocate_new_data_superblock -.L2982: +.L3059: ldr x0, [x29,144] - add x0, x0, :lo12:.LANCHOR4 - str x19, [x0,368] -.L2977: + add x0, x0, :lo12:.LANCHOR5 + str x19, [x0,-144] +.L3054: ldr w0, [x24,964] mov x28, 0 ldr w2, [x24,968] @@ -19015,31 +19849,31 @@ ftl_write: str w0, [x29,140] ldr w0, [x29,204] and w0, w0, 1 - str w0, [x29,116] + str w0, [x29,108] add w0, w21, w20 str w0, [x29,136] -.L2983: +.L3060: ldr w1, [x29,192] mov w0, w28 add w27, w1, w28 ldr w1, [x29,140] cmp w28, w1 - bcs .L3037 + bcs .L3114 ldrh w1, [x19,4] - cbz w1, .L3013 + cbz w1, .L3090 ldr w1, [x29,200] cmp w27, w1 cset w7, eq - cbz w0, .L2985 - ldr w1, [x29,116] + cbz w0, .L3062 + ldr w1, [x29,108] tst w7, w1 - beq .L2985 + beq .L3062 ldrh w1, [x24,824] ldr w2, [x29,136] msub w2, w27, w1, w2 cmp w2, w1 - bne .L3013 -.L2985: + bne .L3090 +.L3062: add x1, x29, 212 mov w2, 0 mov w0, w27 @@ -19078,10 +19912,10 @@ ftl_write: cmp w27, w23 cset w0, eq str w0, [x29,196] - cbnz w0, .L3016 + cbnz w0, .L3093 ldr x7, [x29,160] ldr x5, [x29,184] - cbz w7, .L2986 + cbz w7, .L3063 ldr w0, [x29,136] ldrh w2, [x24,824] msub w2, w27, w2, w0 @@ -19089,8 +19923,8 @@ ftl_write: str w0, [x29,184] ldr w0, [x29,196] str w0, [x29,160] - b .L2989 -.L3016: + b .L3066 +.L3093: ldrh w2, [x24,824] udiv w0, w20, w2 msub w0, w0, w2, w20 @@ -19099,39 +19933,39 @@ ftl_write: cmp w2, w21 csel w0, w2, w21, ls str w0, [x29,184] -.L2989: +.L3066: ldrh w0, [x24,824] ldr w1, [x29,184] cmp w1, w0 - bne .L2990 + bne .L3067 ldr w0, [x29,196] mov x1, x22 - cbnz w0, .L2991 + cbnz w0, .L3068 ldr w0, [x29,184] mul w1, w0, w27 sub w1, w1, w20 ubfiz x1, x1, 9, 23 add x1, x22, x1 -.L2991: +.L3068: ldr w2, [x29,204] mov w0, 56 - cbz w2, .L2992 + cbz w2, .L3069 ldr w2, [x24,968] umull x0, w2, w0 ldr x2, [x24,1032] add x0, x2, x0 - b .L3033 -.L2992: + b .L3110 +.L3069: ldr w2, [x24,968] umull x0, w2, w0 ldr x2, [x24,1032] add x0, x2, x0 ldr x0, [x0,8] - b .L3034 -.L2990: + b .L3111 +.L3067: ldr w0, [x29,212] cmn w0, #1 - beq .L2994 + beq .L3071 str w0, [x29,220] mov w1, 56 ldr w0, [x24,968] @@ -19149,24 +19983,28 @@ ftl_write: bl FlashReadPages ldr w0, [x29,216] cmn w0, #1 - bne .L2995 - ldr w0, [x24,4040] - add w0, w0, 1 - str w0, [x24,4040] - b .L2997 -.L2995: + bne .L3072 + ldr x0, [x29,112] + add x0, x0, :lo12:.LANCHOR4 + ldr w1, [x0,3528] + add w1, w1, 1 + str w1, [x0,3528] + b .L3074 +.L3072: ldr w0, [x26,8] cmp w0, w27 - beq .L2997 - ldr w0, [x24,4040] + beq .L3074 + ldr x0, [x29,112] mov w2, w27 - add w0, w0, 1 - str w0, [x24,4040] - ldr x0, [x29,104] + add x0, x0, :lo12:.LANCHOR4 + ldr w1, [x0,3528] + add w1, w1, 1 + str w1, [x0,3528] + ldr x0, [x29,96] ldr w1, [x26,8] bl printk - b .L2997 -.L2994: + b .L3074 +.L3071: ldr w0, [x24,968] mov w1, 56 ldrh w2, [x24,828] @@ -19176,12 +20014,12 @@ ftl_write: mov w1, 0 ldr x0, [x0,8] bl ftl_memset -.L2997: +.L3074: ldr w1, [x29,184] mov w0, 56 lsl w2, w1, 9 ldr w1, [x29,196] - cbz w1, .L2998 + cbz w1, .L3075 ldr w1, [x24,968] umull x0, w1, w0 ldr x1, [x24,1032] @@ -19191,8 +20029,8 @@ ftl_write: ldr x1, [x1,8] add x0, x1, x0 mov x1, x22 - b .L3035 -.L2998: + b .L3112 +.L3075: ldr w1, [x24,968] umull x0, w1, w0 ldr x1, [x24,1032] @@ -19203,12 +20041,12 @@ ftl_write: sub w1, w1, w20 ubfiz x1, x1, 9, 23 add x1, x22, x1 - b .L3035 -.L2986: + b .L3112 +.L3063: ldr w0, [x29,204] ldrh w1, [x24,824] ldr w2, [x24,968] - cbz w0, .L2999 + cbz w0, .L3076 mul w1, w27, w1 umull x0, w2, w5 sub w1, w1, w20 @@ -19216,10 +20054,10 @@ ftl_write: ubfiz x1, x1, 9, 23 add x0, x2, x0 add x1, x22, x1 -.L3033: +.L3110: str x1, [x0,8] - b .L2993 -.L2999: + b .L3070 +.L3076: umull x0, w2, w5 ldr x2, [x24,1032] mul w1, w27, w1 @@ -19228,11 +20066,11 @@ ftl_write: ubfiz x1, x1, 9, 23 ldr x0, [x0,8] add x1, x22, x1 -.L3034: +.L3111: ldrh w2, [x24,828] -.L3035: +.L3112: bl ftl_memcpy -.L2993: +.L3070: ldr x1, [x29,120] mov w0, -3947 ldr x2, [x29,128] @@ -19252,33 +20090,33 @@ ftl_write: ldr w0, [x24,968] add w0, w0, 1 str w0, [x24,968] - b .L2983 -.L3037: + b .L3060 +.L3114: str w27, [x29,192] mov x0, x1 - b .L2984 -.L3013: + b .L3061 +.L3090: str w27, [x29,192] -.L2984: +.L3061: sub w25, w25, w0 ldr w0, [x29,204] - cbnz w0, .L3003 + cbnz w0, .L3080 ldr w1, [x24,968] ldr w0, [x24,964] cmp w1, w0 - bcs .L3003 + bcs .L3080 ldrh w0, [x19,4] - cbz w0, .L3003 -.L3005: + cbz w0, .L3080 +.L3082: str wzr, [x29,204] - b .L2976 -.L3003: + b .L3053 +.L3080: bl FtlCacheWriteBack str wzr, [x24,968] cmp w25, 1 - bhi .L2976 - b .L3005 -.L3036: + bhi .L3053 + b .L3082 +.L3113: ldr w1, [x29,200] mov w0, w25 sub w1, w1, w23 @@ -19287,23 +20125,23 @@ ftl_write: add x0, x0, :lo12:.LANCHOR2 ldrh w1, [x0,3600] cmp w1, 31 - bhi .L3007 + bhi .L3084 mov w1, 128 mov w19, 16 strh w1, [x0,954] strh w1, [x0,952] -.L3008: +.L3085: mov w0, 0 mov w1, 1 bl ftl_do_gc ldr x0, [x29,152] add x0, x0, :lo12:.LANCHOR2 ldr w0, [x0,1400] - cbnz w0, .L3007 + cbnz w0, .L3084 subs w19, w19, #1 - bne .L3008 - b .L3007 -.L2969: + bne .L3085 + b .L3084 +.L3046: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -19355,16 +20193,16 @@ ftl_fix_nand_power_lost_error: stp x21, x22, [sp,32] stp x23, x24, [sp,48] stp x25, x26, [sp,64] - cbz w0, .L3040 + cbz w0, .L3117 adrp x21, .LANCHOR4 adrp x19, .LANCHOR2 add x0, x21, :lo12:.LANCHOR4 add x20, x19, :lo12:.LANCHOR2 - adrp x24, .LC138 + adrp x24, .LC158 add x26, x20, 3608 add x25, x20, 3656 - ldrh w23, [x0,218] - add x0, x24, :lo12:.LC138 + ldrh w23, [x0,4058] + add x0, x24, :lo12:.LC158 ldr x2, [x20,1184] ubfiz x22, x23, 1, 16 mov w1, w23 @@ -19379,26 +20217,26 @@ ftl_fix_nand_power_lost_error: bl allocate_new_data_superblock mov x0, x25 bl allocate_new_data_superblock -.L3042: +.L3119: subs w20, w20, #1 - beq .L3046 + beq .L3123 mov w0, 1 mov w1, w0 bl ftl_do_gc add x0, x19, :lo12:.LANCHOR2 ldr x0, [x0,1184] ldrh w0, [x0,x22] - cbnz w0, .L3042 -.L3046: + cbnz w0, .L3119 +.L3123: add x20, x19, :lo12:.LANCHOR2 - add x0, x24, :lo12:.LC138 + add x0, x24, :lo12:.LC158 mov w1, w23 ldr x2, [x20,1184] ldrh w2, [x2,x22] bl printk ldr x0, [x20,1184] ldrh w0, [x0,x22] - cbnz w0, .L3044 + cbnz w0, .L3121 add x0, x29, 80 strh w23, [x29,80] bl make_superblock @@ -19407,14 +20245,14 @@ ftl_fix_nand_power_lost_error: mov w6, 65535 mov w20, w0 mov w7, 56 -.L3047: +.L3124: cmp w5, w0, uxth - bls .L3054 + bls .L3131 add x1, x29, 80 add x1, x1, x0, lsl 1 ldrh w2, [x1,16] cmp w2, w6 - beq .L3048 + beq .L3125 add x4, x19, :lo12:.LANCHOR2 lsl w2, w2, 10 umull x1, w20, w7 @@ -19427,14 +20265,14 @@ ftl_fix_nand_power_lost_error: add x1, x2, x1 str xzr, [x1,8] str xzr, [x1,16] -.L3048: +.L3125: add x0, x0, 1 - b .L3047 -.L3054: + b .L3124 +.L3131: add x19, x19, :lo12:.LANCHOR2 - adrp x0, .LC139 + adrp x0, .LC159 mov w1, w23 - add x0, x0, :lo12:.LC139 + add x0, x0, :lo12:.LC159 ldr x2, [x19,1184] ldrh w2, [x2,x22] bl printk @@ -19446,11 +20284,11 @@ ftl_fix_nand_power_lost_error: mov w1, 1 mov w2, w20 bl FlashEraseBlocks -.L3044: +.L3121: add x21, x21, :lo12:.LANCHOR4 mov w0, -1 - strh w0, [x21,218] -.L3040: + strh w0, [x21,4058] +.L3117: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -19459,6 +20297,7 @@ ftl_fix_nand_power_lost_error: ret .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error .global gc_ink_free_return_value + .global check_valid_page_count_table .global FtlUpdateVaildLpnCount .global g_ect_tbl_power_up_flush .global last_cache_match_count @@ -19683,19 +20522,33 @@ ftl_fix_nand_power_lost_error: .section .rodata .align 3 .LANCHOR3 = . + 0 - .type __func__.19441, %object - .size __func__.19441, 11 -__func__.19441: + .type __func__.19448, %object + .size __func__.19448, 11 +__func__.19448: .string "FtlMemInit" .zero 5 - .type __func__.20390, %object - .size __func__.20390, 21 -__func__.20390: + .type __func__.20195, %object + .size __func__.20195, 12 +__func__.20195: + .string "FtlCheckVpc" + .zero 4 + .type __func__.20228, %object + .size __func__.20228, 17 +__func__.20228: + .string "FtlDumpBlockInfo" + .zero 7 + .type __func__.20247, %object + .size __func__.20247, 16 +__func__.20247: + .string "FtlScanAllBlock" + .type __func__.20495, %object + .size __func__.20495, 21 +__func__.20495: .string "FtlVpcCheckAndModify" .zero 3 - .type __func__.19514, %object - .size __func__.19514, 8 -__func__.19514: + .type __func__.19521, %object + .size __func__.19521, 8 +__func__.19521: .string "FtlInit" .section .rodata.str1.1,"aMS",%progbits,1 .LC0: @@ -19785,198 +20638,238 @@ __func__.19514: .LC42: .string "load_l2p_region refresh = %x phyAddr = %x\n" .LC43: - .string "FtlVendorPartRead refresh = %x phyAddr = %x\n" + .string "region_id = %x phyAddr = %x\n" .LC44: - .string "FtlVpcTblFlush error = %x error count = %d\n" + .string "map_ppn:" .LC45: - .string "%s\n" + .string "FtlVendorPartRead refresh = %x phyAddr = %x\n" .LC46: - .string "no ect" + .string "FtlVpcTblFlush error = %x error count = %d\n" .LC47: - .string "page map lost %x %x %x %x\n" + .string "%s\n" .LC48: - .string "slc mode" + .string "no ect" .LC49: - .string "FLASH INFO:\n" + .string "...%s enter...\n" .LC50: - .string "FLASH ID: %x\n" + .string "vpc1" .LC51: - .string "Device Capacity: %d MB\n" + .string "vpc2" .LC52: - .string "FMWAIT: %x %x %x %x\n" + .string "FtlCheckVpc2 %x = %x %x\n" .LC53: - .string "FTL INFO:\n" + .string "free blk vpc error %x = %x %x\n" .LC54: - .string "g_MaxLpn = 0x%x\n" + .string "id = %x,%x addr= %x,spare= %x %x %x %x data = %x\n" .LC55: - .string "g_VaildLpn = 0x%x\n" + .string ":" .LC56: - .string "read_page_count = 0x%x\n" + .string "Ftlscanalldata = %x\n" .LC57: - .string "discard_page_count = 0x%x\n" + .string "scan lpa = %x ppa= %x\n" .LC58: - .string "write_page_count = 0x%x\n" + .string "lba = %x,addr= %x,spare= %x %x %x %x data=%x %x\n" .LC59: - .string "cache_write_count = 0x%x\n" + .string "phyBlk = %x,addr= %x,spare= %x %x %x %x data=%x %x\n" .LC60: - .string "l2p_write_count = 0x%x\n" + .string "id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" .LC61: - .string "gc_page_count = 0x%x\n" + .string "Mblk:" .LC62: - .string "totle_write = %d MB\n" + .string "L2P:" .LC63: - .string "totle_read = %d MB\n" + .string "L2PC:" .LC64: - .string "GSV = 0x%x\n" + .string "superBlkID = %x vpc=%x\n" .LC65: - .string "GDV = 0x%x\n" + .string "flashmode = %x pagenum = %x %x\n" .LC66: - .string "bad blk num = %d %d\n" + .string "blk = %x vpc=%x mode = %x\n" .LC67: - .string "free_superblocks = 0x%x\n" + .string "mlc id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" .LC68: - .string "mlc_EC = 0x%x\n" + .string "slc id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" .LC69: - .string "slc_EC = 0x%x\n" + .string "slc mode" .LC70: - .string "avg_EC = 0x%x\n" + .string "FLASH INFO:\n" .LC71: - .string "sys_EC = 0x%x\n" + .string "FLASH ID: %x\n" .LC72: - .string "max_EC = 0x%x\n" + .string "Device Capacity: %d MB\n" .LC73: - .string "min_EC = 0x%x\n" + .string "FMWAIT: %x %x %x %x\n" .LC74: - .string "PLT = 0x%x\n" + .string "FTL INFO:\n" .LC75: - .string "POT = 0x%x\n" + .string "g_MaxLpn = 0x%x\n" .LC76: - .string "MaxSector = 0x%x\n" + .string "g_VaildLpn = 0x%x\n" .LC77: - .string "init_sys_blks_pp = 0x%x\n" + .string "read_page_count = 0x%x\n" .LC78: - .string "sys_blks_pp = 0x%x\n" + .string "discard_page_count = 0x%x\n" .LC79: - .string "free sysblock = 0x%x\n" + .string "write_page_count = 0x%x\n" .LC80: - .string "data_blks_pp = 0x%x\n" + .string "cache_write_count = 0x%x\n" .LC81: - .string "data_op_blks_pp = 0x%x\n" + .string "l2p_write_count = 0x%x\n" .LC82: - .string "max_data_blks = 0x%x\n" + .string "gc_page_count = 0x%x\n" .LC83: - .string "Sys.id = 0x%x\n" + .string "totle_write = %d MB\n" .LC84: - .string "Bbt.id = 0x%x\n" + .string "totle_read = %d MB\n" .LC85: - .string "ACT.page = 0x%x\n" + .string "GSV = 0x%x\n" .LC86: - .string "ACT.plane = 0x%x\n" + .string "GDV = 0x%x\n" .LC87: - .string "ACT.id = 0x%x\n" + .string "bad blk num = %d %d\n" .LC88: - .string "ACT.mode = 0x%x\n" + .string "free_superblocks = 0x%x\n" .LC89: - .string "ACT.a_pages = 0x%x\n" + .string "mlc_EC = 0x%x\n" .LC90: - .string "ACT VPC = 0x%x\n" + .string "slc_EC = 0x%x\n" .LC91: - .string "BUF.page = 0x%x\n" + .string "avg_EC = 0x%x\n" .LC92: - .string "BUF.plane = 0x%x\n" + .string "sys_EC = 0x%x\n" .LC93: - .string "BUF.id = 0x%x\n" + .string "max_EC = 0x%x\n" .LC94: - .string "BUF.mode = 0x%x\n" + .string "min_EC = 0x%x\n" .LC95: - .string "BUF.a_pages = 0x%x\n" + .string "PLT = 0x%x\n" .LC96: - .string "BUF VPC = 0x%x\n" + .string "POT = 0x%x\n" .LC97: - .string "TMP.page = 0x%x\n" + .string "MaxSector = 0x%x\n" .LC98: - .string "TMP.plane = 0x%x\n" + .string "init_sys_blks_pp = 0x%x\n" .LC99: - .string "TMP.id = 0x%x\n" + .string "sys_blks_pp = 0x%x\n" .LC100: - .string "TMP.mode = 0x%x\n" + .string "free sysblock = 0x%x\n" .LC101: - .string "TMP.a_pages = 0x%x\n" + .string "data_blks_pp = 0x%x\n" .LC102: - .string "GC.page = 0x%x\n" + .string "data_op_blks_pp = 0x%x\n" .LC103: - .string "GC.plane = 0x%x\n" + .string "max_data_blks = 0x%x\n" .LC104: - .string "GC.id = 0x%x\n" + .string "Sys.id = 0x%x\n" .LC105: - .string "GC.mode = 0x%x\n" + .string "Bbt.id = 0x%x\n" .LC106: - .string "GC.a_pages = 0x%x\n" + .string "ACT.page = 0x%x\n" .LC107: - .string "WR_CHK = 0x%x %x %x %x\n" + .string "ACT.plane = 0x%x\n" .LC108: - .string "Read Err Cnt = 0x%x\n" + .string "ACT.id = 0x%x\n" .LC109: - .string "Prog Err Cnt = 0x%x\n" + .string "ACT.mode = 0x%x\n" .LC110: - .string "gc_free_blk_th= 0x%x\n" + .string "ACT.a_pages = 0x%x\n" .LC111: - .string "gc_merge_free_blk_th= 0x%x\n" + .string "ACT VPC = 0x%x\n" .LC112: - .string "gc_skip_write_count= 0x%x\n" + .string "BUF.page = 0x%x\n" .LC113: - .string "gc_blk_index= 0x%x\n" + .string "BUF.plane = 0x%x\n" .LC114: - .string "free min EC= 0x%x\n" + .string "BUF.id = 0x%x\n" .LC115: - .string "free max EC= 0x%x\n" + .string "BUF.mode = 0x%x\n" .LC116: - .string "GC__SB VPC = 0x%x\n" + .string "BUF.a_pages = 0x%x\n" .LC117: - .string "%d. [0x%x]=0x%x 0x%x 0x%x\n" + .string "BUF VPC = 0x%x\n" .LC118: - .string "free %d. [0x%x] 0x%x 0x%x\n" + .string "TMP.page = 0x%x\n" .LC119: - .string "FTL version: 5.0.48 20180615" + .string "TMP.plane = 0x%x\n" .LC120: - .string "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x\n" + .string "TMP.id = 0x%x\n" .LC121: - .string "FtlGcScanTempBlkError ID %x %x!!!!!!!\n" + .string "TMP.mode = 0x%x\n" .LC122: - .string "FtlGcRefreshBlock 0x%x\n" + .string "TMP.a_pages = 0x%x\n" .LC123: - .string "FtlGcMarkBadPhyBlk %d 0x%x\n" + .string "GC.page = 0x%x\n" .LC124: - .string "FtlGcFreeBadSuperBlk 0x%x\n" + .string "GC.plane = 0x%x\n" .LC125: - .string "decrement_vpc_count %x = %d\n" + .string "GC.id = 0x%x\n" .LC126: - .string "RSB refresh addr %x\n" + .string "GC.mode = 0x%x\n" .LC127: - .string "spuer block %x vpn is 0\n " + .string "GC.a_pages = 0x%x\n" .LC128: - .string "g_recovery_ppa %x ver %x\n " + .string "WR_CHK = 0x%x %x %x %x\n" .LC129: - .string "...%s enter...\n" + .string "Read Err = 0x%x\n" .LC130: - .string "FtlCheckVpc %x = %x %x\n" + .string "Prog Err = 0x%x\n" .LC131: - .string "%d GC datablk = %x vpc %x %x\n" + .string "gc_free_blk_th= 0x%x\n" .LC132: - .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n" + .string "gc_merge_free_blk_th= 0x%x\n" .LC133: - .string "Ftlwrite decrement_vpc_count %x = %d\n" + .string "gc_skip_write_count= 0x%x\n" .LC134: - .string "GC des block %x done\n" + .string "gc_blk_index= 0x%x\n" .LC135: - .string "...%s: no bad block mapping table, format device\n" + .string "free min EC= 0x%x\n" .LC136: - .string "...%s FtlSysBlkInit error ,format device!\n" + .string "free max EC= 0x%x\n" .LC137: - .string "FtlWrite: lpa error:%x %x\n" + .string "GC__SB VPC = 0x%x\n" .LC138: - .string "fix power lost blk = %x vpc=%x\n" + .string "%d. [0x%x]=0x%x 0x%x 0x%x\n" .LC139: + .string "free %d. [0x%x] 0x%x 0x%x\n" +.LC140: + .string "FTL version: 5.0.48 20180703" +.LC141: + .string "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x\n" +.LC142: + .string "FtlGcScanTempBlkError ID %x %x!!!!!!!\n" +.LC143: + .string "FtlGcRefreshBlock 0x%x\n" +.LC144: + .string "FtlGcMarkBadPhyBlk %d 0x%x\n" +.LC145: + .string "FtlGcFreeBadSuperBlk 0x%x\n" +.LC146: + .string "decrement_vpc_count %x = %d\n" +.LC147: + .string "RSB refresh addr %x\n" +.LC148: + .string "spuer block %x vpn is 0\n " +.LC149: + .string "g_recovery_ppa %x ver %x\n " +.LC150: + .string "FtlCheckVpc %x = %x %x\n" +.LC151: + .string "%d GC datablk = %x vpc %x %x\n" +.LC152: + .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n" +.LC153: + .string "Ftlwrite decrement_vpc_count %x = %d\n" +.LC154: + .string "GC des block %x done\n" +.LC155: + .string "...%s: no bad block mapping table, format device\n" +.LC156: + .string "...%s FtlSysBlkInit error ,format device!\n" +.LC157: + .string "FtlWrite: lpa error:%x %x\n" +.LC158: + .string "fix power lost blk = %x vpc=%x\n" +.LC159: .string "erase power lost blk = %x vpc=%x\n" .data .align 3 @@ -22447,7 +23340,8 @@ power_up_flag: .align 3 .LANCHOR0 = . + 0 .LANCHOR2 = . + 4352 -.LANCHOR4 = . + 8704 +.LANCHOR4 = . + 13056 +.LANCHOR5 = . + 17408 .type gFlashPageBuffer0, %object .size gFlashPageBuffer0, 8 gFlashPageBuffer0: @@ -23217,6 +24111,10 @@ gSysInfo: g_totle_map_block: .zero 2 .zero 2 + .type check_valid_page_count_table, %object + .size check_valid_page_count_table, 8192 +check_valid_page_count_table: + .zero 8192 .type g_MaxLbn, %object .size g_MaxLbn, 4 g_MaxLbn: diff --git a/drivers/rk_nand/rk_zftl_arm64.S b/drivers/rk_nand/rk_zftl_arm64.S index 658e71a576580..efe0577639814 100644 --- a/drivers/rk_nand/rk_zftl_arm64.S +++ b/drivers/rk_nand/rk_zftl_arm64.S @@ -4202,7 +4202,7 @@ gc_write_completed: bl printk adrp x0, .LC0 mov x1, x22 - mov w2, 539 + mov w2, 544 add x0, x0, :lo12:.LC0 bl printk bl dump_stack @@ -4241,7 +4241,7 @@ gc_write_completed: beq .L658 adrp x0, .LC0 mov x1, x22 - mov w2, 546 + mov w2, 551 add x0, x0, :lo12:.LC0 bl printk bl dump_stack @@ -5743,7 +5743,7 @@ gc_free_src_blk: .L946: adrp x0, .LC0 mov x1, x21 - mov w2, 793 + mov w2, 798 add x0, x0, :lo12:.LC0 bl printk bl dump_stack @@ -8437,10 +8437,9 @@ gc_static_wearleveling: cmp w2, w0 ble .L1315 ldr w0, [x4,x3] - add w2, w21, 2 ubfx x0, x0, 11, 8 - cmp w0, w2 - ble .L1316 + cmp w0, w21 + bls .L1316 cbz w1, .L1315 ldrh w0, [x4,x3] and w0, w0, 2047 @@ -8476,13 +8475,13 @@ gc_static_wearleveling: cmp w2, w0 ble .L1315 ldrh w0, [x4,x3] - add w2, w20, 2 + add w2, w20, 8 and w0, w0, 2047 cmp w0, w2 ble .L1317 cbz w1, .L1315 ldr w0, [x4,x3] - add w1, w21, 2 + add w1, w21, 4 ubfx x0, x0, 11, 8 cmp w0, w1 bgt .L1315 @@ -12918,154 +12917,6 @@ sblk_read_page: ret .size sblk_read_page, .-sblk_read_page .align 2 - .global gc_check_data_one_wl - .type gc_check_data_one_wl, %function -gc_check_data_one_wl: - sub sp, sp, #112 - stp x29, x30, [sp,16] - add x29, sp, 16 - stp x19, x20, [sp,32] - adrp x19, .LANCHOR0 - str x27, [sp,96] - add x20, x19, :lo12:.LANCHOR0 - stp x21, x22, [sp,48] - stp x23, x24, [sp,64] - stp x25, x26, [sp,80] - ldr x0, [x20,2904] - ldr x23, [x20,608] - add x20, x20, 2896 - cbnz x0, .L2157 - mov w0, 1 - bl buf_alloc - str x0, [x20,8] -.L2157: - add x0, x19, :lo12:.LANCHOR0 - ldr x20, [x0,2904] - cbnz x20, .L2158 - adrp x1, .LANCHOR3 - adrp x0, .LC0 - add x1, x1, :lo12:.LANCHOR3 - mov w2, 366 - add x1, x1, 296 - add x0, x0, :lo12:.LC0 - bl printk - bl dump_stack -.L2158: - mov w24, 0 - add x25, x23, 80 - add x21, x19, :lo12:.LANCHOR0 - adrp x26, .LANCHOR4 -.L2159: - ldrb w0, [x25,9] - cmp w24, w0 - bge .L2180 - mov w22, 1 - sxtw x27, w24 -.L2168: - add x0, x21, 2896 - ldrh w1, [x0,20] - cmp w22, w1 - bgt .L2181 - add x1, x27, 8 - ldrh w2, [x21,3350] - ldrh w0, [x0,16] - ldrh w1, [x25,x1,lsl 1] - mul w1, w1, w2 - ldrb w2, [x21,3257] - cmp w2, 3 - bne .L2160 - add w1, w1, w0 - orr w1, w1, w22, lsl 24 - b .L2179 -.L2160: - cmp w2, 2 - bne .L2162 - sub w0, w0, #1 - add w1, w0, w1 - add w1, w1, w22 - orr w1, w1, 33554432 - b .L2179 -.L2162: - add w1, w1, w0 -.L2179: - str w1, [x20,40] - mov x0, x20 - mov w1, 1 - bl sblk_read_page - ldr w2, [x20,52] - cmn w2, #1 - beq .L2163 - add x3, x26, :lo12:.LANCHOR4 - ldrh w0, [x21,2918] - ldr x1, [x20,24] - lsl x0, x0, 2 - ldr x4, [x3,1136] - ldr w5, [x4,x0] - ldr w4, [x1,4] - cmp w5, w4 - bne .L2163 - ldr x3, [x3,1144] - ldr w3, [x3,x0] - ldr w0, [x1,8] - cmp w3, w0 - beq .L2164 -.L2163: - add x0, x26, :lo12:.LANCHOR4 - ldrh w4, [x21,2918] - lsl x4, x4, 2 - ldr x1, [x0,1136] - ldr w3, [x1,x4] - cmn w3, #1 - beq .L2164 - adrp x1, .LANCHOR2 - ldr w1, [x1,#:lo12:.LANCHOR2] - tbz x1, 10, .L2165 - ldr x7, [x20,24] - ldr x5, [x0,1144] - ldr w0, [x7,12] - str w0, [sp] - adrp x0, .LC161 - add x0, x0, :lo12:.LC161 - ldr w4, [x5,x4] - ldr w6, [x7,4] - ldr w5, [x7] - ldr w1, [x20,40] - ldr w7, [x7,8] - bl printk -.L2165: - add x19, x19, :lo12:.LANCHOR0 - ldrh w1, [x23,80] - ldr x0, [x19,600] - strh wzr, [x0,x1,lsl 1] - mov w0, -1 - b .L2166 -.L2164: - ldrh w0, [x21,2918] - add w22, w22, 1 - add w0, w0, 1 - strh w0, [x21,2918] - b .L2168 -.L2181: - add w24, w24, 1 - b .L2159 -.L2180: - add x19, x19, :lo12:.LANCHOR0 - ldrh w0, [x19,2912] - add w0, w0, 1 - strh w0, [x19,2912] - mov w0, 0 -.L2166: - sub sp, x29, #16 - ldp x19, x20, [sp,32] - ldp x21, x22, [sp,48] - ldp x23, x24, [sp,64] - ldp x25, x26, [sp,80] - ldr x27, [sp,96] - ldp x29, x30, [sp,16] - add sp, sp, 112 - ret - .size gc_check_data_one_wl, .-gc_check_data_one_wl - .align 2 .global flash_prog_page .type flash_prog_page, %function flash_prog_page: @@ -13090,24 +12941,24 @@ flash_prog_page: add x22, x19, x22, lsl 8 and w24, w1, 2097151 ubfx x27, x23, 24, 2 - tbz x0, 4, .L2183 - adrp x0, .LC162 + tbz x0, 4, .L2157 + adrp x0, .LC161 mov w2, w27 - add x0, x0, :lo12:.LC162 + add x0, x0, :lo12:.LC161 bl printk -.L2183: +.L2157: bl nandc_wait_flash_ready mov w0, w20 bl hynix_reconfig_rr_para mov w0, w20 bl nandc_cs mov w0, w20 - cbnz w27, .L2184 + cbnz w27, .L2158 bl zftl_flash_enter_slc_mode - b .L2185 -.L2184: + b .L2159 +.L2158: bl zftl_flash_exit_slc_mode -.L2185: +.L2159: ubfiz x4, x20, 8, 8 mov w0, 128 add x19, x19, x4 @@ -13139,16 +12990,16 @@ flash_prog_page: mov w0, w20 and w19, w21, 4 bl nandc_de_cs - tbz x21, 2, .L2186 + tbz x21, 2, .L2160 adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 12, .L2186 - adrp x0, .LC163 + tbz x0, 12, .L2160 + adrp x0, .LC162 mov w1, w23 - add x0, x0, :lo12:.LC163 + add x0, x0, :lo12:.LC162 mov w2, w19 bl printk -.L2186: +.L2160: mov w0, w19 ldr x27, [sp,80] ldp x19, x20, [sp,16] @@ -13169,13 +13020,13 @@ flash_test_blk: uxtb w22, w0 uxth w20, w1 adrp x19, .LANCHOR4 - cbnz w22, .L2197 + cbnz w22, .L2171 add x0, x19, :lo12:.LANCHOR4 ldrb w1, [x0,1266] mov w0, w22 cmp w1, w20 - bhi .L2198 -.L2197: + bhi .L2172 +.L2171: add x19, x19, :lo12:.LANCHOR4 mov w1, 165 mov w2, 32 @@ -13192,7 +13043,7 @@ flash_test_blk: mov w1, w21 bl flash_erase_block cmn w0, #1 - beq .L2203 + beq .L2177 adrp x20, .LANCHOR2 ldr x2, [x19,1248] add x20, x20, :lo12:.LANCHOR2 @@ -13203,7 +13054,7 @@ flash_test_blk: ldrb w4, [x20,9] bl flash_prog_page cmn w0, #1 - beq .L2203 + beq .L2177 ldrb w4, [x20,9] mov w0, w22 ldr x2, [x19,1248] @@ -13212,28 +13063,28 @@ flash_test_blk: bl flash_read_page cmn w0, #1 mov w20, w0 - beq .L2203 + beq .L2177 ldr x0, [x19,1248] ldr w1, [x0] mov w0, 23130 bfi w0, w0, 16, 16 cmp w1, w0 - bne .L2203 + bne .L2177 ldr x0, [x19,1256] ldr w1, [x0] mov w0, 42405 bfi w0, w0, 16, 16 cmp w1, w0 csinv w20, w20, wzr, eq - b .L2200 -.L2203: + b .L2174 +.L2177: mov w20, -1 -.L2200: +.L2174: mov w0, w22 mov w1, w21 bl flash_erase_block mov w0, w20 -.L2198: +.L2172: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x29, x30, [sp], 48 @@ -13295,28 +13146,28 @@ flash_start_tlc_page_prog: mov x23, x6 cmp w0, w26 mov x19, x4 - bhi .L2213 + bhi .L2187 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 648 - add x1, x1, 320 + add x1, x1, 296 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2213: +.L2187: add x4, x19, :lo12:.LANCHOR0 add x26, x4, x26, sxtw ldrb w26, [x26,736] mov w0, w26 ldr x19, [x4,536] bl nandc_cs - cbz w25, .L2214 + cbz w25, .L2188 sxtw x1, w26 add x1, x1, 8 add x1, x19, x1, lsl 8 str w25, [x1,8] -.L2214: +.L2188: ubfiz x7, x26, 8, 8 mov w0, 128 add x19, x19, x7 @@ -13422,16 +13273,16 @@ sblk_tlc_prog_one_page: mov x20, x0 ldr x0, [x0] ldr w21, [x0,40] -.L2220: +.L2194: mov w0, w21 mov w1, 1 bl queue_lun_state mov w19, w0 - cbz w0, .L2222 + cbz w0, .L2196 bl queue_wait_first_req_completed bl queue_remove_completed_req - b .L2220 -.L2222: + b .L2194 +.L2196: mov x0, x20 bl queue_tlc_prog_cmd ldr x21, [sp,32] @@ -13454,17 +13305,17 @@ sblk_xlc_prog_pages: ldr x0, [x0] mov w24, w2 ldr w20, [x0,40] -.L2224: +.L2198: mov w0, w20 mov w1, 1 bl queue_lun_state - cbz w0, .L2228 + cbz w0, .L2202 bl queue_wait_first_req_completed bl queue_remove_completed_req - b .L2224 -.L2228: + b .L2198 +.L2202: cmp w24, 2 - bne .L2226 + bne .L2200 ldr x6, [x19] mov w1, 1 ldr x0, [x22] @@ -13548,11 +13399,11 @@ sblk_xlc_prog_pages: add x0, x0, :lo12:.LANCHOR0 add x0, x0, 2835 bl buf_add_tail - b .L2227 -.L2226: + b .L2201 +.L2200: mov x0, x19 bl queue_tlc_prog_cmd -.L2227: +.L2201: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -13581,50 +13432,50 @@ flash_start_page_prog: and w20, w1, 2097151 ubfx x23, x1, 24, 2 cmp w0, w24 - bhi .L2230 + bhi .L2204 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 699 - add x1, x1, 352 + add x1, x1, 328 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2230: +.L2204: add x28, x22, :lo12:.LANCHOR0 add x0, x28, x24, sxtw ldrb w21, [x0,736] ldr x19, [x28,536] bl nandc_rdy_status - cbnz w0, .L2231 + cbnz w0, .L2205 ldrb w0, [x28,633] cmp w0, 1 - bne .L2232 + bne .L2206 bl nandc_wait_flash_ready - b .L2231 -.L2232: + b .L2205 +.L2206: mov w0, w24 mov w1, w20 mov w2, 64 bl flash_wait_device_ready_raw -.L2231: +.L2205: mov w0, w21 bl hynix_reconfig_rr_para mov w0, w21 bl nandc_cs - cbnz w23, .L2233 + cbnz w23, .L2207 mov w0, w20 bl slc_phy_page_address_calc mov w20, w0 ldrb w0, [x22,#:lo12:.LANCHOR0] - cbz w0, .L2234 + cbz w0, .L2208 mov w0, w21 bl zftl_flash_enter_slc_mode - b .L2234 -.L2233: + b .L2208 +.L2207: mov w0, w21 bl zftl_flash_exit_slc_mode -.L2234: +.L2208: ubfiz x4, x21, 8, 8 mov w0, 128 add x19, x19, x4 @@ -13674,28 +13525,28 @@ queue_prog_cmd: add x1, x0, :lo12:.LANCHOR0 ldrb w2, [x1,2835] cmp w2, 255 - beq .L2239 + beq .L2213 ubfx x4, x4, 21, 3 add x1, x1, 784 -.L2241: +.L2215: add x3, x1, x2, lsl 6 ldr w5, [x3,40] ubfx x5, x5, 21, 3 cmp w4, w5 - bne .L2240 + bne .L2214 ldrb w5, [x3,58] add x3, x3, 48 cmp w5, 6 - bne .L2240 + bne .L2214 mov w1, 3 strb w1, [x3,10] - b .L2239 -.L2240: + b .L2213 +.L2214: lsl x2, x2, 6 ldrb w2, [x1,x2] cmp w2, 255 - bne .L2241 -.L2239: + bne .L2215 +.L2213: mov w1, 3 strb w1, [x19,58] mov w1, 1 @@ -13724,63 +13575,63 @@ sblk_prog_page: mov x19, x0 uxtb w20, w1 ldrh w0, [x0,50] - cbz w0, .L2247 + cbz w0, .L2221 adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L2247 - adrp x0, .LC164 + tbz x0, 8, .L2221 + adrp x0, .LC163 ldr w1, [x19,40] - add x0, x0, :lo12:.LC164 + add x0, x0, :lo12:.LC163 mov w2, w20 bl printk -.L2247: +.L2221: adrp x24, .LANCHOR0 adrp x25, .LC0 add x23, x24, :lo12:.LANCHOR0 mov w21, 0 add x27, x23, 784 add x25, x25, :lo12:.LC0 -.L2248: - cbz w20, .L2278 +.L2222: + cbz w20, .L2252 ldrb w26, [x19] ldr w22, [x19,40] -.L2249: +.L2223: mov w0, w22 mov w1, 1 bl queue_lun_state - cbz w0, .L2279 + cbz w0, .L2253 bl queue_wait_first_req_completed bl queue_remove_completed_req - b .L2249 -.L2279: + b .L2223 +.L2253: cmp w20, 1 - beq .L2251 + beq .L2225 add x0, x24, :lo12:.LANCHOR0 ldrb w0, [x0,781] - cbnz w0, .L2252 -.L2251: + cbnz w0, .L2226 +.L2225: mov x0, x19 bl queue_prog_cmd - b .L2253 -.L2252: + b .L2227 +.L2226: ldrb w0, [x19] ubfx x28, x22, 21, 3 cmp w0, 255 - bne .L2254 + bne .L2228 adrp x1, .LANCHOR3 mov w2, 546 add x1, x1, :lo12:.LANCHOR3 mov x0, x25 - add x1, x1, 376 + add x1, x1, 352 bl printk bl dump_stack -.L2254: +.L2228: ldrb w0, [x19] add x0, x27, x0, lsl 6 ldr w4, [x0,40] ubfx x0, x4, 21, 3 cmp w28, w0 - bne .L2255 + bne .L2229 ldrh w3, [x23,3340] mov w1, 21 ldrb w6, [x23,3338] @@ -13801,13 +13652,13 @@ sblk_prog_page: and w0, w1, w5 cmp w0, w3 uxth w2, w2 - beq .L2255 + beq .L2229 and w22, w2, w22 and w2, w2, w4 cmp w22, w2 - bne .L2255 + bne .L2229 cmp w21, w6 - beq .L2255 + beq .L2229 ldr w1, [x19,40] mov w0, 17 ldr x2, [x19,8] @@ -13822,20 +13673,20 @@ sblk_prog_page: strb w0, [x19] add x0, x23, 2835 bl buf_add_tail - b .L2253 -.L2255: + b .L2227 +.L2229: mov x0, x19 mov w21, 0 bl queue_prog_cmd -.L2253: +.L2227: subs w20, w20, #1 - beq .L2278 + beq .L2252 add x19, x24, :lo12:.LANCHOR0 sbfiz x26, x26, 6, 32 add x19, x19, 784 add x19, x19, x26 - b .L2248 -.L2278: + b .L2222 +.L2252: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -13857,13 +13708,13 @@ ftl_flush: mov x19, x2 adrp x20, .LANCHOR4 ldrb w1, [x0,2857] - cbz w1, .L2281 + cbz w1, .L2255 add x2, x20, :lo12:.LANCHOR4 add x0, x0, 784 ldrb w2, [x2,1267] add x0, x0, x2, lsl 6 bl sblk_prog_page -.L2281: +.L2255: add x2, x19, :lo12:.LANCHOR0 add x20, x20, :lo12:.LANCHOR4 mov w0, -1 @@ -13885,15 +13736,15 @@ zftl_cache_flush: stp x29, x30, [sp, -16]! add x29, sp, 0 ldrb w0, [x0,#:lo12:.LANCHOR0+2857] - cbz w0, .L2285 + cbz w0, .L2259 bl timer_get_time adrp x1, .LANCHOR4+1268 ldr w1, [x1,#:lo12:.LANCHOR4+1268] add w1, w1, 100 cmp w0, w1 - bls .L2285 + bls .L2259 bl ftl_flush -.L2285: +.L2259: ldp x29, x30, [sp], 16 ret .size zftl_cache_flush, .-zftl_cache_flush @@ -13920,50 +13771,50 @@ flash_prog_page_en: cmp w0, w21 ubfx x28, x20, 24, 2 mov x19, x6 - bhi .L2290 + bhi .L2264 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 473 - add x1, x1, 392 + add x1, x1, 368 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2290: +.L2264: add x0, x19, :lo12:.LANCHOR0 mov w26, w20 add x1, x0, x21, sxtw ldrb w27, [x1,736] - cbnz w28, .L2291 + cbnz w28, .L2265 adrp x1, .LANCHOR0 ldrb w1, [x1,#:lo12:.LANCHOR0] - cbz w1, .L2292 + cbz w1, .L2266 ldrb w0, [x0,1] - cbz w0, .L2291 -.L2292: + cbz w0, .L2265 +.L2266: add x6, x19, :lo12:.LANCHOR0 ldrh w26, [x6,2] ldrb w1, [x6,1] udiv w2, w20, w26 mul w26, w2, w26 sub w0, w20, w26 - cbz w1, .L2293 + cbz w1, .L2267 add w26, w26, w0, lsl 1 - b .L2291 -.L2293: + b .L2265 +.L2267: add x6, x6, 4 ldrh w0, [x6,w0,uxtw 1] add w26, w0, w26 -.L2291: +.L2265: adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 4, .L2294 - adrp x0, .LC165 + tbz x0, 4, .L2268 + adrp x0, .LC164 mov w1, w27 - add x0, x0, :lo12:.LC165 + add x0, x0, :lo12:.LC164 mov w2, w20 bl printk -.L2294: +.L2268: mov w1, w26 mov w0, w27 mov x2, x23 @@ -13971,7 +13822,7 @@ flash_prog_page_en: mov w4, w24 bl flash_prog_page mov w26, w0 - cbz w25, .L2295 + cbz w25, .L2269 adrp x19, .LANCHOR4 mov w0, w21 add x25, x19, :lo12:.LANCHOR4 @@ -13981,53 +13832,53 @@ flash_prog_page_en: ldr x3, [x25,1256] bl flash_read_page_en cmp w0, 512 - beq .L2296 + beq .L2270 cmn w0, #1 - beq .L2296 + beq .L2270 ldr x0, [x25,1248] ldr w1, [x23] ldr w0, [x0] cmp w1, w0 - bne .L2296 + bne .L2270 ldr x0, [x25,1256] ldr w1, [x22] ldr w0, [x0] cmp w1, w0 - beq .L2295 -.L2296: + beq .L2269 +.L2270: add x19, x19, :lo12:.LANCHOR4 mov w2, 4 - adrp x0, .LC166 + adrp x0, .LC165 mov w3, w2 - add x0, x0, :lo12:.LC166 + add x0, x0, :lo12:.LC165 ldr x1, [x19,1256] bl rknand_print_hex mov w2, 4 - adrp x0, .LC167 + adrp x0, .LC166 ldr x1, [x19,1248] - add x0, x0, :lo12:.LC167 + add x0, x0, :lo12:.LC166 mov w3, w2 bl rknand_print_hex - b .L2297 -.L2295: + b .L2271 +.L2269: cmn w26, #1 mov w0, w26 - bne .L2298 -.L2297: - adrp x0, .LC168 + bne .L2272 +.L2271: + adrp x0, .LC167 mov w1, w20 - add x0, x0, :lo12:.LC168 + add x0, x0, :lo12:.LC167 bl printk adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 499 - add x1, x1, 392 + add x1, x1, 368 add x0, x0, :lo12:.LC0 bl printk bl dump_stack mov w0, -1 -.L2298: +.L2272: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -14058,20 +13909,20 @@ ftl_prog_page: bl flash_prog_page_en cmn w0, #1 mov w19, w0 - bne .L2312 + bne .L2286 adrp x2, .LANCHOR3 adrp x0, .LC0 add x1, x2, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC0 - add x1, x1, 416 + add x1, x1, 392 mov w2, 2151 bl printk bl dump_stack - adrp x0, .LC168 + adrp x0, .LC167 mov w1, w20 - add x0, x0, :lo12:.LC168 + add x0, x0, :lo12:.LC167 bl printk -.L2312: +.L2286: mov w0, w19 ldp x19, x20, [sp,16] ldp x29, x30, [sp], 64 @@ -14096,15 +13947,15 @@ ftl_info_flush: adrp x23, .LANCHOR3 add x19, x22, :lo12:.LANCHOR4 ldrb w2, [x0,2832] - adrp x24, .LC169 + adrp x24, .LC168 add x23, x23, :lo12:.LANCHOR3 add x0, x19, 1280 lsl w2, w2, 1 mov w25, 0 - add x24, x24, :lo12:.LC169 - add x23, x23, 432 + add x24, x24, :lo12:.LC168 + add x23, x23, 408 bl ftl_memset -.L2314: +.L2288: add x0, x21, :lo12:.LANCHOR0 ldrb w27, [x19,1536] ldrh w20, [x19,1538] @@ -14119,29 +13970,29 @@ ftl_info_flush: str w0, [x19,1284] adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 12, .L2315 + tbz x0, 12, .L2289 ldr w3, [x3,4] mov x0, x24 mov w1, w27 mov w2, w20 bl printk -.L2315: +.L2289: add x1, x21, :lo12:.LANCHOR0 ldrh w0, [x19,1538] ldrh w1, [x1,3300] cmp w1, w0 - bhi .L2316 + bhi .L2290 adrp x20, .LC0 add x20, x20, :lo12:.LC0 -.L2321: +.L2295: ldrb w1, [x19,1537] add w1, w1, 1 uxtb w1, w1 strb w1, [x19,1537] cmp w1, 7 - bls .L2317 + bls .L2291 mov x1, 0 -.L2320: +.L2294: add x0, x21, :lo12:.LANCHOR0 uxth w25, w1 ldr x2, [x0,728] @@ -14151,24 +14002,24 @@ ftl_info_flush: add w0, w2, 127 uxtb w0, w0 cmp w0, 125 - bhi .L2318 + bhi .L2292 mov x1, x23 mov w2, 742 mov x0, x20 bl printk bl dump_stack - b .L2319 -.L2318: + b .L2293 +.L2292: cmp w2, 255 - bne .L2319 + bne .L2293 add x1, x1, 1 cmp x1, 8 - bne .L2320 + bne .L2294 mov w25, w1 -.L2319: +.L2293: strb w25, [x19,1537] mov w25, 1 -.L2317: +.L2291: add x27, x21, :lo12:.LANCHOR0 ldrb w1, [x19,1537] ldr x0, [x27,728] @@ -14176,7 +14027,7 @@ ftl_info_flush: ldrb w2, [x1,40] strb w2, [x19,1536] cmp w2, 255 - beq .L2321 + beq .L2295 ldrh w20, [x27,3350] mov w0, 0 mul w20, w2, w20 @@ -14191,13 +14042,13 @@ ftl_info_flush: bl ftl_prog_page mov w0, 1 strh w0, [x19,1538] - b .L2322 -.L2316: + b .L2296 +.L2290: madd w20, w27, w28, w20 - cbnz w0, .L2322 + cbnz w0, .L2296 mov w1, w20 bl flash_erase_block -.L2322: +.L2296: add x4, x21, :lo12:.LANCHOR0 mov w1, w20 mov w0, 0 @@ -14210,41 +14061,41 @@ ftl_info_flush: adrp x0, .LANCHOR5 add w1, w1, 1 strh w1, [x19,1538] - beq .L2323 + beq .L2297 add x1, x0, :lo12:.LANCHOR5 ldrb w1, [x1,576] - cbz w1, .L2324 -.L2323: + cbz w1, .L2298 +.L2297: add x0, x0, :lo12:.LANCHOR5 strb wzr, [x0,576] - b .L2314 -.L2324: - cbnz w25, .L2325 -.L2333: + b .L2288 +.L2298: + cbnz w25, .L2299 +.L2307: add x22, x22, :lo12:.LANCHOR4 ldrb w0, [x22,1536] cmp w0, 255 - bne .L2327 + bne .L2301 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 778 - add x1, x1, 432 + add x1, x1, 408 add x0, x0, :lo12:.LC0 bl printk bl dump_stack - b .L2327 -.L2325: + b .L2301 +.L2299: ldrb w19, [x19,1537] adrp x20, .LANCHOR3 adrp x23, .LC0 add x20, x20, :lo12:.LANCHOR3 add w19, w19, 1 add x23, x23, :lo12:.LC0 - add x20, x20, 432 -.L2328: + add x20, x20, 408 +.L2302: cmp w19, 7 - bhi .L2333 + bhi .L2307 add x0, x21, :lo12:.LANCHOR0 ldr x1, [x0,728] add w0, w19, 8 @@ -14253,27 +14104,27 @@ ftl_info_flush: add w0, w24, 127 uxtb w0, w0 cmp w0, 125 - bhi .L2329 + bhi .L2303 mov x1, x20 mov w2, 771 mov x0, x23 bl printk bl dump_stack - b .L2330 -.L2329: + b .L2304 +.L2303: cmp w24, 255 - beq .L2331 -.L2330: + beq .L2305 +.L2304: add x0, x21, :lo12:.LANCHOR0 ldrh w1, [x0,3350] mov w0, 0 mul w1, w24, w1 bl flash_erase_block -.L2331: +.L2305: add w19, w19, 1 uxth w19, w19 - b .L2328 -.L2327: + b .L2302 +.L2301: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -14312,10 +14163,10 @@ ftl_info_blk_init: str x1, [x23,2864] mov w1, 0 str x24, [x23,584] - adrp x26, .LC170 + adrp x26, .LC169 adrp x27, .LANCHOR2 bl ftl_memset - add x26, x26, :lo12:.LC170 + add x26, x26, :lo12:.LC169 add x0, x20, 640 mov w1, 0 mov w2, 16384 @@ -14327,7 +14178,7 @@ ftl_info_blk_init: strh wzr, [x22,1538] ldrb w0, [x0,40] strb w0, [x22,1536] -.L2351: +.L2325: add x5, x19, :lo12:.LANCHOR0 add w0, w20, 8 sxth w25, w20 @@ -14335,7 +14186,7 @@ ftl_info_blk_init: add x0, x1, x0, sxtw ldrb w1, [x0,32] cmp w1, 255 - beq .L2347 + beq .L2321 ldrh w22, [x5,3350] mov w0, 0 ldrb w4, [x5,2832] @@ -14348,7 +14199,7 @@ ftl_info_blk_init: cmn w0, #1 mov w28, w0 ldr x5, [x29,104] - bne .L2348 + bne .L2322 ldrb w4, [x5,2832] mov w0, 0 add w1, w22, 1 @@ -14356,9 +14207,9 @@ ftl_info_blk_init: mov x3, x23 bl ftl_read_page mov w28, w0 -.L2348: +.L2322: ldr w0, [x27,#:lo12:.LANCHOR2] - tbz x0, 12, .L2349 + tbz x0, 12, .L2323 add x0, x19, :lo12:.LANCHOR0 mov w1, w20 mov w2, w28 @@ -14367,39 +14218,39 @@ ftl_info_blk_init: mov x0, x26 ldr w4, [x4] bl printk -.L2349: +.L2323: cmn w28, #1 - beq .L2347 + beq .L2321 add x0, x19, :lo12:.LANCHOR0 ldr x0, [x0,2864] ldr w1, [x0] mov w0, 21574 movk w0, 0x494c, lsl 16 cmp w1, w0 - beq .L2359 -.L2347: + beq .L2333 +.L2321: sub w20, w20, #1 cmn w20, #1 - bne .L2351 + bne .L2325 mov w25, 0 - b .L2350 -.L2359: + b .L2324 +.L2333: mov w20, w25 -.L2350: +.L2324: adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 12, .L2352 + tbz x0, 12, .L2326 add x0, x19, :lo12:.LANCHOR0 mov w1, w20 mov w2, 4800 ldr x3, [x0,2864] - adrp x0, .LC171 - add x0, x0, :lo12:.LC171 + adrp x0, .LC170 + add x0, x0, :lo12:.LC170 ldr w3, [x3] bl printk -.L2352: +.L2326: cmn w20, #1 - bne .L2353 + bne .L2327 add x0, x21, :lo12:.LANCHOR4 mov w1, 0 add x19, x19, :lo12:.LANCHOR0 @@ -14410,13 +14261,13 @@ ftl_info_blk_init: mov w0, 21574 movk w0, 0x494c, lsl 16 str w0, [x1] - mov w0, 8 + mov w0, 9 movk w0, 0x6, lsl 16 ldr x1, [x19,2864] str w0, [x1,12] mov w0, w20 - b .L2354 -.L2353: + b .L2328 +.L2327: add x26, x19, :lo12:.LANCHOR0 add x23, x21, :lo12:.LANCHOR4 add w0, w25, 8 @@ -14438,8 +14289,8 @@ ftl_info_blk_init: ldrb w0, [x23,1536] ldrh w23, [x26,3350] mul w23, w0, w23 -.L2355: - tbnz w22, #31, .L2358 +.L2329: + tbnz w22, #31, .L2332 add x26, x19, :lo12:.LANCHOR0 mov w0, 0 add w1, w22, w23 @@ -14448,14 +14299,14 @@ ftl_info_blk_init: ldrb w4, [x26,2832] bl ftl_read_page cmn w0, #1 - beq .L2356 + beq .L2330 ldr x0, [x26,2864] ldr w1, [x0] mov w0, 21574 movk w0, 0x494c, lsl 16 cmp w1, w0 - bne .L2356 -.L2358: + bne .L2330 +.L2332: add x21, x21, :lo12:.LANCHOR4 add x19, x19, :lo12:.LANCHOR0 strh w20, [x21,1538] @@ -14469,12 +14320,12 @@ ftl_info_blk_init: mov w0, 0 bl ftl_info_flush mov w0, 0 - b .L2354 -.L2356: + b .L2328 +.L2330: sub w22, w22, #1 sxth w22, w22 - b .L2355 -.L2354: + b .L2329 +.L2328: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -14501,30 +14352,30 @@ ftl_ext_info_flush: ldr x1, [x1,608] ldr w3, [x1,520] cmp w0, w3 - bls .L2377 + bls .L2351 ldr w2, [x1,12] sub w2, w2, w3 add w2, w2, w0 str w2, [x1,12] - b .L2390 -.L2377: - bcs .L2378 -.L2390: + b .L2364 +.L2351: + bcs .L2352 +.L2364: str w0, [x1,520] -.L2378: +.L2352: adrp x23, .LANCHOR3 adrp x19, .LANCHOR4 add x23, x23, :lo12:.LANCHOR3 add x19, x19, :lo12:.LANCHOR4 mov w0, 0 - add x23, x23, 448 + add x23, x23, 424 add x19, x19, 1280 bl ftl_total_vpn_update -.L2379: +.L2353: adrp x24, .LANCHOR5 add x24, x24, :lo12:.LANCHOR5 add x25, x24, 640 -.L2382: +.L2356: add x2, x22, :lo12:.LANCHOR0 ldr x0, [x2,2864] ldr w1, [x0,56] @@ -14533,22 +14384,22 @@ ftl_ext_info_flush: ldrh w1, [x0,140] ldrh w0, [x2,3300] cmp w1, w0 - bcc .L2380 + bcc .L2354 bl ftl_ext_alloc_new_blk -.L2380: +.L2354: add x0, x22, :lo12:.LANCHOR0 ldr x0, [x0,2864] ldrh w1, [x0,130] mov w0, 65535 cmp w1, w0 - bne .L2381 + bne .L2355 adrp x0, .LC0 mov x1, x23 mov w2, 1747 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2381: +.L2355: add x21, x22, :lo12:.LANCHOR0 mov w0, 21 mov w1, 1 @@ -14585,17 +14436,17 @@ ftl_ext_info_flush: uxth w1, w1 strh w1, [x2,140] cmp w1, 1 - beq .L2382 + beq .L2356 cmn w0, #1 - beq .L2383 + beq .L2357 ldrb w0, [x24,578] - cbz w0, .L2384 -.L2383: + cbz w0, .L2358 +.L2357: adrp x0, .LANCHOR5 add x0, x0, :lo12:.LANCHOR5 strb wzr, [x0,578] - b .L2379 -.L2384: + b .L2353 +.L2358: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -14642,26 +14493,26 @@ ftl_ext_info_init: adrp x0, .LANCHOR2 mov w23, w24 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 12, .L2392 + tbz x0, 12, .L2366 ldr x5, [x26,2864] adrp x1, .LANCHOR3 - adrp x0, .LC172 + adrp x0, .LC171 add x1, x1, :lo12:.LANCHOR3 - add x0, x0, :lo12:.LC172 - add x1, x1, 472 + add x0, x0, :lo12:.LC171 + add x1, x1, 448 ldrh w5, [x5,130] mov w2, 1791 mov w3, w24 uxth w4, w27 bl printk -.L2392: +.L2366: add x20, x20, :lo12:.LANCHOR5 add x21, x21, :lo12:.LANCHOR4 mov w26, w24 add x20, x20, 640 add x21, x21, 1280 -.L2393: - tbnz w26, #31, .L2398 +.L2367: + tbnz w26, #31, .L2372 add x27, x19, :lo12:.LANCHOR0 mov w0, w25 mov x2, x20 @@ -14671,31 +14522,31 @@ ftl_ext_info_init: madd w1, w22, w1, w26 bl flash_read_page_en cmp w0, 512 - beq .L2394 + beq .L2368 cmn w0, #1 - beq .L2394 + beq .L2368 ldr x0, [x27,608] ldr w1, [x0] mov w0, 20038 movk w0, 0x4549, lsl 16 cmp w1, w0 - bne .L2394 -.L2398: + bne .L2368 +.L2372: bl zftl_sblk_list_init add x0, x19, :lo12:.LANCHOR0 ldr x0, [x0,2864] ldrh w1, [x0,140] cmp w1, w24 - bgt .L2396 + bgt .L2370 add w23, w23, 1 strh w23, [x0,140] bl ftl_ext_info_flush - b .L2396 -.L2394: + b .L2370 +.L2368: sub w26, w26, #1 sxth w26, w26 - b .L2393 -.L2396: + b .L2367 +.L2370: add x19, x19, :lo12:.LANCHOR0 ldr x20, [x19,608] bl timer_get_time @@ -14756,13 +14607,13 @@ ftl_write_last_log_page: ldrh w24, [x0,12] cmp w1, 1 ldr x22, [x19,3872] - bne .L2410 + bne .L2384 mov x20, x0 bl ftl_get_new_free_page cmn w0, #1 mov w23, w0 mov w21, 0 - beq .L2410 + beq .L2384 ldrh w0, [x20] add x22, x22, x24, uxth 2 bl ftl_vpn_decrement @@ -14787,7 +14638,7 @@ ftl_write_last_log_page: str w21, [x2,8] str w21, [x2,12] bl ftl_prog_ppa_page -.L2410: +.L2384: mov w0, w21 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -14810,34 +14661,34 @@ ftl_open_sblk_recovery: stp x21, x22, [sp,32] stp x25, x26, [sp,64] mov x27, x1 - tbz x0, 12, .L2415 - adrp x0, .LC173 + tbz x0, 12, .L2389 + adrp x0, .LC172 ldrh w1, [x19,2] - add x0, x0, :lo12:.LC173 + add x0, x0, :lo12:.LC172 bl printk -.L2415: +.L2389: ldr w0, [x24,#:lo12:.LANCHOR2] - tbz x0, 12, .L2416 - adrp x0, .LC174 + tbz x0, 12, .L2390 + adrp x0, .LC173 ldrb w1, [x19,5] - add x0, x0, :lo12:.LC174 + add x0, x0, :lo12:.LC173 bl printk -.L2416: +.L2390: ldr w0, [x24,#:lo12:.LANCHOR2] - tbz x0, 12, .L2417 - adrp x0, .LC175 + tbz x0, 12, .L2391 + adrp x0, .LC174 ldrh w1, [x19] - add x0, x0, :lo12:.LC175 + add x0, x0, :lo12:.LC174 bl printk -.L2417: +.L2391: ldr w0, [x24,#:lo12:.LANCHOR2] - tbz x0, 12, .L2418 - adrp x0, .LC176 + tbz x0, 12, .L2392 + adrp x0, .LC175 ldrh w1, [x19,16] ldrh w2, [x19,18] - add x0, x0, :lo12:.LC176 + add x0, x0, :lo12:.LC175 bl printk -.L2418: +.L2392: ldrh w0, [x19,10] adrp x21, .LANCHOR0 strh w0, [x19,14] @@ -14845,7 +14696,7 @@ ftl_open_sblk_recovery: ldrh w1, [x19] ldrh w0, [x0,576] cmp w1, w0 - bcs .L2414 + bcs .L2388 mov w0, 1 adrp x25, .LANCHOR4 adrp x26, .LANCHOR3 @@ -14855,25 +14706,25 @@ ftl_open_sblk_recovery: ldrb w22, [x19,5] mov x20, x0 ldrh w23, [x19,2] - add x0, x26, 496 + add x0, x26, 472 mov w28, 0 add x25, x25, 1280 str x0, [x29,120] -.L2421: +.L2395: add x0, x21, :lo12:.LANCHOR0 ldrh w0, [x0,3300] cmp w0, w23 - bls .L2424 + bls .L2398 ldrb w22, [x19,5] -.L2422: +.L2396: ldrb w0, [x19,9] cmp w0, w22 - bls .L2498 + bls .L2472 add x0, x19, x22, sxtw 1 ldrh w0, [x0,16] mov w1, 65535 cmp w0, w1 - beq .L2423 + beq .L2397 add x3, x21, :lo12:.LANCHOR0 ldr x2, [x20,24] ldrh w1, [x3,3350] @@ -14883,21 +14734,21 @@ ftl_open_sblk_recovery: bl ftl_read_ppa_page cmp w0, 512 mov w26, w0 - beq .L2424 + beq .L2398 cmn w0, #1 - beq .L2425 + beq .L2399 ldr x0, [x20,24] ldr w1, [x0] cmn w1, #1 - bne .L2425 + bne .L2399 ldr w0, [x0,4] cmn w0, #1 - bne .L2425 + bne .L2399 ldr x0, [x20,8] ldr w0, [x0] cmn w0, #1 - beq .L2424 -.L2425: + beq .L2398 +.L2399: adrp x0, .LANCHOR5+577 mov w1, 1 strb w1, [x0,#:lo12:.LANCHOR5+577] @@ -14905,14 +14756,14 @@ ftl_open_sblk_recovery: ldrh w1, [x19,10] madd w0, w23, w0, w22 cmp w1, w0 - beq .L2426 + beq .L2400 adrp x0, .LC0 ldr x1, [x29,120] mov w2, 1396 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2426: +.L2400: ldrh w0, [x19,10] ldrh w1, [x19,6] ldrb w2, [x19,9] @@ -14921,28 +14772,28 @@ ftl_open_sblk_recovery: ldrh w0, [x0,3300] mul w0, w0, w2 cmp w1, w0 - beq .L2427 + beq .L2401 adrp x0, .LC0 ldr x1, [x29,120] mov w2, 1397 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2427: +.L2401: cmn w26, #1 - beq .L2431 + beq .L2405 ldr x0, [x20,24] ldr w0, [x0,4] cmn w0, #1 - beq .L2431 + beq .L2405 bl lpa_hash_get_ppa - cbz x27, .L2429 + cbz x27, .L2403 ldr x2, [x20,24] ldr w3, [x2,8] cmp w0, w3 - beq .L2429 + beq .L2403 cmn w0, #1 - beq .L2429 + beq .L2403 add x4, x21, :lo12:.LANCHOR0 mov w5, 21 mov w28, 1 @@ -14956,7 +14807,7 @@ ftl_open_sblk_recovery: udiv w3, w3, w1 ldrh w1, [x27] cmp w1, w3, uxth - bne .L2429 + bne .L2403 ldr w6, [x2] mov x2, x25 ldrb w3, [x4,2832] @@ -14970,11 +14821,11 @@ ftl_open_sblk_recovery: ldr x4, [x29,112] cmp w0, w6 ldr x5, [x29,96] - bcc .L2429 + bcc .L2403 ldr x0, [x20,24] ldr w1, [x0,8] cmn w1, #1 - beq .L2431 + beq .L2405 ldrh w0, [x4,3340] sub w5, w5, w0 lsr w1, w1, w0 @@ -14984,22 +14835,22 @@ ftl_open_sblk_recovery: and w1, w28, w1 udiv w0, w1, w0 bl ftl_vpn_decrement - b .L2431 -.L2429: + b .L2405 +.L2403: ldr x2, [x20,24] add x1, x21, :lo12:.LANCHOR0 ldr w3, [x2,4] ldr w0, [x1,2840] cmp w3, w0 - bcs .L2431 + bcs .L2405 ldrb w0, [x19,9] ldrh w4, [x1,3300] ldrh w3, [x19,10] mul w0, w0, w4 sub w0, w0, #1 cmp w3, w0 - blt .L2499 -.L2431: + blt .L2473 +.L2405: ldrh w0, [x19,6] mov w28, 1 sub w0, w0, #1 @@ -15007,16 +14858,16 @@ ftl_open_sblk_recovery: ldrh w0, [x19,10] add w0, w0, 1 strh w0, [x19,10] -.L2423: +.L2397: add w22, w22, 1 uxth w22, w22 - b .L2422 -.L2498: + b .L2396 +.L2472: add w23, w23, 1 strb wzr, [x19,5] uxth w23, w23 - b .L2421 -.L2424: + b .L2395 +.L2398: add x2, x21, :lo12:.LANCHOR0 ldrh w0, [x19,10] ldrh w1, [x19,6] @@ -15027,35 +14878,35 @@ ftl_open_sblk_recovery: strb w22, [x19,5] mul w0, w0, w2 cmp w1, w0 - beq .L2435 + beq .L2409 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 1473 - add x1, x1, 496 + add x1, x1, 472 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2435: +.L2409: add x0, x21, :lo12:.LANCHOR0 ldrh w3, [x19,10] ldr x4, [x0,3872] mov w0, 0 mov w2, w0 -.L2436: +.L2410: cmp w2, w3 - bcs .L2500 + bcs .L2474 ldrh w1, [x19,12] add w1, w2, w1 ldr w1, [x4,x1,lsl 2] cmn w1, #1 - beq .L2437 + beq .L2411 add w1, w0, 1 uxth w0, w1 -.L2437: +.L2411: add w2, w2, 1 - b .L2436 -.L2500: + b .L2410 +.L2474: add x2, x21, :lo12:.LANCHOR0 ldrb w1, [x19,9] sub w0, w0, w3 @@ -15063,44 +14914,44 @@ ftl_open_sblk_recovery: madd w0, w1, w22, w0 uxth w22, w0 ldr w0, [x24,#:lo12:.LANCHOR2] - tbz x0, 12, .L2439 + tbz x0, 12, .L2413 ldrh w1, [x19] - adrp x0, .LC177 + adrp x0, .LC176 ldr x4, [x2,600] - add x0, x0, :lo12:.LC177 + add x0, x0, :lo12:.LC176 ubfiz x3, x1, 1, 16 mov w2, w22 ldrh w3, [x4,x3] bl printk -.L2439: +.L2413: add x0, x21, :lo12:.LANCHOR0 ldrh w1, [x19] - adrp x23, .LC178 + adrp x23, .LC177 mov w25, -1 - add x23, x23, :lo12:.LC178 + add x23, x23, :lo12:.LC177 ldr x0, [x0,600] strh w22, [x0,x1,lsl 1] mov x0, x20 mov w22, 0 bl buf_free -.L2440: +.L2414: add x2, x21, :lo12:.LANCHOR0 ldrb w0, [x2,3276] cmp w22, w0, lsl 1 - bcs .L2501 - cbz w28, .L2441 + bcs .L2475 + cbz w28, .L2415 ldrh w0, [x19,6] cmp w0, 1 - bls .L2441 + bls .L2415 mov x0, x19 bl ftl_get_new_free_page mov w26, w0 ldr w0, [x24,#:lo12:.LANCHOR2] - tbz x0, 12, .L2442 + tbz x0, 12, .L2416 mov x0, x23 mov w1, w26 bl printk -.L2442: +.L2416: add x3, x21, :lo12:.LANCHOR0 ldr x0, [x20,24] ldr x1, [x3,2864] @@ -15121,10 +14972,10 @@ ftl_open_sblk_recovery: bl ftl_prog_ppa_page ldrh w0, [x19] bl ftl_vpn_decrement -.L2441: +.L2415: add w22, w22, 1 - b .L2440 -.L2501: + b .L2414 +.L2475: ldrh w1, [x2,3300] ldrh w0, [x19,12] ldrb w3, [x19,9] @@ -15134,30 +14985,30 @@ ftl_open_sblk_recovery: ldr x1, [x2,3872] ldr w0, [x1,x0] cmn w0, #1 - beq .L2444 + beq .L2418 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 1503 - add x1, x1, 496 + add x1, x1, 472 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2444: +.L2418: ldrh w0, [x19,6] cmp w0, 1 - bne .L2414 + bne .L2388 mov x0, x19 bl ftl_write_last_log_page - b .L2414 -.L2499: + b .L2388 +.L2473: ldr x0, [x1,2864] ldr w2, [x2] ldr w1, [x0,8] cmp w2, w1 - bls .L2432 + bls .L2406 str w2, [x0,8] -.L2432: +.L2406: ldr x1, [x20,24] ldrh w0, [x19,10] ldrh w2, [x19,12] @@ -15165,8 +15016,8 @@ ftl_open_sblk_recovery: ldr w0, [x1,4] ldr w1, [x1,8] bl lpa_hash_update_ppa - b .L2431 -.L2414: + b .L2405 +.L2388: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -15193,8 +15044,8 @@ pm_write_page: mov x24, x1 adrp x25, .LANCHOR0 add x23, x23, :lo12:.LC0 - add x22, x22, 520 -.L2503: + add x22, x22, 496 +.L2477: add x2, x25, :lo12:.LANCHOR0 adrp x19, .LANCHOR0 ldr x0, [x2,2864] @@ -15204,28 +15055,28 @@ pm_write_page: str w1, [x0,48] ldrh w1, [x2,3300] cmp w3, w1 - bcs .L2504 + bcs .L2478 ldrh w1, [x0,692] mov w0, 65535 cmp w1, w0 - bne .L2505 -.L2504: + bne .L2479 +.L2478: bl pm_alloc_new_blk mov w0, 0 bl ftl_info_flush -.L2505: +.L2479: add x0, x19, :lo12:.LANCHOR0 ldr x0, [x0,2864] ldrh w1, [x0,692] mov w0, 65535 cmp w1, w0 - bne .L2506 + bne .L2480 mov x1, x22 mov w2, 230 mov x0, x23 bl printk bl dump_stack -.L2506: +.L2480: add x19, x19, :lo12:.LANCHOR0 adrp x20, .LANCHOR7 add x27, x20, :lo12:.LANCHOR7 @@ -15257,28 +15108,28 @@ pm_write_page: uxth w2, w2 strh w2, [x1,696] cmp w2, 1 - beq .L2507 + beq .L2481 ldrb w2, [x27,-120] - cbz w2, .L2508 -.L2507: + cbz w2, .L2482 +.L2481: add x20, x20, :lo12:.LANCHOR7 strb wzr, [x20,-120] - b .L2503 -.L2508: + b .L2477 +.L2482: cmn w0, #1 - bne .L2510 - adrp x0, .LC179 + bne .L2484 + adrp x0, .LC178 mov w1, w26 - add x0, x0, :lo12:.LC179 + add x0, x0, :lo12:.LC178 bl printk - b .L2503 -.L2510: + b .L2477 +.L2484: ldrh w0, [x1,698] cmp w21, w0 - bcs .L2511 + bcs .L2485 add x21, x1, x21, uxtw 2 str w26, [x21,704] -.L2511: +.L2485: mov w0, 0 ldr x27, [sp,80] ldp x19, x20, [sp,16] @@ -15301,31 +15152,31 @@ flash_info_flush: stp x23, x24, [sp,48] stp x25, x26, [sp,64] stp x27, x28, [sp,80] - tbz x0, 12, .L2516 + tbz x0, 12, .L2490 adrp x2, .LANCHOR3 adrp x0, .LC127 add x2, x2, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC127 mov w1, 251 - add x2, x2, 536 + add x2, x2, 512 bl printk -.L2516: +.L2490: adrp x22, .LANCHOR4 adrp x23, .LANCHOR0 add x0, x22, :lo12:.LANCHOR4 mov w1, 0 mov w2, 64 add x19, x23, :lo12:.LANCHOR0 - adrp x24, .LC181 - adrp x25, .LC182 + adrp x24, .LC180 + adrp x25, .LC181 ldr x0, [x0,1232] mov w26, 0 - add x24, x24, :lo12:.LC181 - add x25, x25, :lo12:.LC182 + add x24, x24, :lo12:.LC180 + add x25, x25, :lo12:.LC181 bl ftl_memset ldr x1, [x19,728] - adrp x0, .LC180 - add x0, x0, :lo12:.LC180 + adrp x0, .LC179 + add x0, x0, :lo12:.LC179 mov w2, 4 mov w3, 16 bl rknand_print_hex @@ -15334,7 +15185,7 @@ flash_info_flush: ldr w1, [x19,8] bl js_hash str w0, [x19,12] -.L2517: +.L2491: add x21, x22, :lo12:.LANCHOR4 add x27, x23, :lo12:.LANCHOR0 mov x0, x24 @@ -15348,7 +15199,7 @@ flash_info_flush: ldrh w0, [x21,1242] sub w1, w1, #1 cmp w0, w1 - blt .L2518 + blt .L2492 ldr x1, [x27,728] ldrb w19, [x21,1241] strh wzr, [x21,1242] @@ -15369,14 +15220,14 @@ flash_info_flush: ldrh w0, [x27,2] mul w19, w19, w0 mov w0, 0 - b .L2526 -.L2518: + b .L2500 +.L2492: madd w19, w20, w28, w19 - cbnz w0, .L2519 -.L2526: + cbnz w0, .L2493 +.L2500: mov w1, w19 bl flash_erase_block -.L2519: +.L2493: add x2, x23, :lo12:.LANCHOR0 add x20, x22, :lo12:.LANCHOR4 mov w4, 4 @@ -15398,16 +15249,16 @@ flash_info_flush: ldrh w1, [x20,1242] add w1, w1, 1 strh w1, [x20,1242] - bne .L2520 + bne .L2494 mov x0, x25 mov w1, w19 bl printk - b .L2517 -.L2520: - cbnz w26, .L2527 + b .L2491 +.L2494: + cbnz w26, .L2501 mov w26, 1 - b .L2517 -.L2527: + b .L2491 +.L2501: mov w0, 0 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -15431,15 +15282,15 @@ nand_flash_init: ldr w0, [x20,#:lo12:.LANCHOR2] stp x25, x26, [sp,64] str x27, [sp,80] - tbz x0, 12, .L2529 + tbz x0, 12, .L2503 adrp x2, .LANCHOR3 adrp x0, .LC127 add x2, x2, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC127 mov w1, 2209 - add x2, x2, 560 + add x2, x2, 536 bl printk -.L2529: +.L2503: mov x0, x19 adrp x19, .LANCHOR0 add x22, x19, :lo12:.LANCHOR0 @@ -15464,71 +15315,71 @@ nand_flash_init: mov w2, 32 mov w27, 44 bl ftl_memset -.L2535: +.L2509: mov w0, w23 mov x1, x24 bl flash_read_id add x0, x22, 744 strb w26, [x23,x0] - cbnz x23, .L2530 + cbnz x23, .L2504 ldrb w0, [x25] sub w0, w0, #1 uxtb w0, w0 cmp w0, 253 - bls .L2531 -.L2533: + bls .L2505 +.L2507: mov w22, -2 - b .L2597 -.L2531: + b .L2571 +.L2505: ldrb w0, [x25,1] cmp w0, 255 - beq .L2533 -.L2530: + beq .L2507 +.L2504: ldrb w0, [x24] cmp w0, 181 - bne .L2534 + bne .L2508 strb w27, [x24] -.L2534: +.L2508: add x23, x23, 1 add x24, x24, 8 cmp x23, 4 - bne .L2535 + bne .L2509 add x23, x20, :lo12:.LANCHOR2 add x24, x19, :lo12:.LANCHOR0 add x23, x23, 440 mov w22, 0 add x24, x24, 748 -.L2538: +.L2512: ldrb w2, [x23] add x0, x23, 1 mov x1, x24 bl flash_mem_cmp8 - cbnz w0, .L2536 + cbnz w0, .L2510 add x1, x20, :lo12:.LANCHOR2 ubfiz x22, x22, 5, 32 add x0, x1, 440 adds x22, x0, x22 - beq .L2533 + beq .L2507 ldrb w3, [x22,22] mov x0, 0 - b .L2540 -.L2536: + b .L2514 +.L2510: add w22, w22, 1 add x23, x23, 32 cmp w22, 30 - bne .L2538 - b .L2533 -.L2540: + bne .L2512 + b .L2507 +.L2514: add x4, x1, x0, lsl 5 mov w2, w0 ldrb w4, [x4,1400] cmp w4, w3 - beq .L2539 + beq .L2513 add x0, x0, 1 cmp x0, 4 - bne .L2540 + bne .L2514 mov w2, w0 -.L2539: +.L2513: add x23, x20, :lo12:.LANCHOR2 add x24, x19, :lo12:.LANCHOR0 add x1, x23, 1400 @@ -15544,30 +15395,30 @@ nand_flash_init: bl ftl_memcpy ldrb w0, [x24,516] cmp w0, 8 - bhi .L2541 + bhi .L2515 ldrb w1, [x23,20] cmp w1, 60 - bls .L2542 + bls .L2516 mov w1, 60 strb w1, [x23,20] -.L2542: +.L2516: cmp w0, 8 - bne .L2541 + bne .L2515 add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,748] cmp w0, 44 - beq .L2603 -.L2541: + beq .L2577 +.L2515: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2543 + tbz x0, 12, .L2517 adrp x2, .LANCHOR3 adrp x0, .LC127 add x2, x2, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC127 mov w1, 2233 - add x2, x2, 560 + add x2, x2, 536 bl printk -.L2543: +.L2517: add x23, x21, :lo12:.LANCHOR4 mov w0, 16384 add x22, x19, :lo12:.LANCHOR0 @@ -15616,10 +15467,10 @@ nand_flash_init: strb w2, [x22,3348] strb w0, [x19,#:lo12:.LANCHOR0] cmp w1, 9 - bne .L2544 + bne .L2518 mov w1, 70 strb w1, [x22,632] -.L2544: +.L2518: add x2, x20, :lo12:.LANCHOR2 add x1, x21, :lo12:.LANCHOR4 add x2, x2, 376 @@ -15628,26 +15479,26 @@ nand_flash_init: ldrb w0, [x2,19] ldrh w2, [x2,16] strb w0, [x3,725] - tbz x2, 6, .L2546 + tbz x2, 6, .L2520 sub w2, w0, #17 uxtb w2, w2 cmp w2, 2 - bhi .L2547 + bhi .L2521 adrp x2, micron_read_retrial cmp w0, 19 add x2, x2, :lo12:micron_read_retrial str x2, [x1,1224] - bne .L2599 + bne .L2573 mov w0, 15 - b .L2600 -.L2547: + b .L2574 +.L2521: sub w2, w0, #65 uxtb w2, w2 cmp w2, 1 - bls .L2568 + bls .L2542 cmp w0, 33 - bne .L2550 -.L2568: + bne .L2524 +.L2542: add x0, x21, :lo12:.LANCHOR4 adrp x1, toshiba_read_retrial add x1, x1, :lo12:toshiba_read_retrial @@ -15657,8 +15508,8 @@ nand_flash_init: strb w2, [x1,726] mov w1, 7 strb w1, [x0,1216] - b .L2546 -.L2550: + b .L2520 +.L2524: sub w2, w0, #67 uxtb w2, w2 cmp w2, 1 @@ -15666,106 +15517,106 @@ nand_flash_init: cset w3, ls uxtb w2, w2 cmp w2, 1 - bls .L2569 - cbz w3, .L2552 -.L2569: + bls .L2543 + cbz w3, .L2526 +.L2543: add x2, x21, :lo12:.LANCHOR4 adrp x1, toshiba_read_retrial add x1, x1, :lo12:toshiba_read_retrial cmp w0, 35 str x1, [x2,1224] - beq .L2554 + beq .L2528 cmp w0, 68 - beq .L2554 + beq .L2528 mov w0, 7 strb w0, [x2,1216] - b .L2555 -.L2554: + b .L2529 +.L2528: add x0, x21, :lo12:.LANCHOR4 mov w1, 17 strb w1, [x0,1216] -.L2555: +.L2529: add x0, x19, :lo12:.LANCHOR0 mov w1, 4 - cbnz w3, .L2601 + cbnz w3, .L2575 mov w1, 5 -.L2601: +.L2575: strb w1, [x0,726] - b .L2546 -.L2552: + b .L2520 +.L2526: sub w0, w0, #36 uxtb w0, w0 cmp w0, 1 - bhi .L2546 + bhi .L2520 adrp x0, toshiba_3d_read_retrial add x0, x0, :lo12:toshiba_3d_read_retrial str x0, [x1,1224] -.L2599: +.L2573: mov w0, 7 -.L2600: +.L2574: strb w0, [x1,1216] -.L2546: +.L2520: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2557 + tbz x0, 12, .L2531 adrp x2, .LANCHOR3 adrp x0, .LC127 add x2, x2, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC127 mov w1, 2281 - add x2, x2, 560 + add x2, x2, 536 bl printk -.L2557: +.L2531: add x0, x19, :lo12:.LANCHOR0 strb wzr, [x0,672] ldrb w0, [x0,780] - tbz x0, 0, .L2558 + tbz x0, 0, .L2532 mov w0, 4 bl nandc_set_if_mode mov w0, 1 bl flash_set_interface_mode mov w0, 1 - b .L2602 -.L2558: + b .L2576 +.L2532: mov w0, 4 -.L2602: +.L2576: bl nandc_set_if_mode bl flash_info_blk_init cmn w0, #1 mov w22, w0 - bne .L2560 + bne .L2534 ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2561 + tbz x0, 12, .L2535 adrp x2, .LANCHOR3 adrp x0, .LC127 add x2, x2, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC127 mov w1, 2301 - add x2, x2, 560 + add x2, x2, 536 bl printk -.L2561: +.L2535: add x19, x19, :lo12:.LANCHOR0 mov w1, 17 ldr x0, [x19,728] strb w1, [x0,32] - b .L2597 -.L2560: + b .L2571 +.L2534: add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,725] sub w0, w0, #1 uxtb w0, w0 cmp w0, 6 - bhi .L2562 + bhi .L2536 add x0, x21, :lo12:.LANCHOR4 adrp x1, hynix_read_retrial add x1, x1, :lo12:hynix_read_retrial str x1, [x0,1224] -.L2562: +.L2536: add x19, x19, :lo12:.LANCHOR0 ldrb w0, [x19,780] - tbz x0, 2, .L2564 + tbz x0, 2, .L2538 ldr x0, [x19,728] ldrb w0, [x0,19] - cbz w0, .L2564 + cbz w0, .L2538 add x21, x21, :lo12:.LANCHOR4 ldrh w1, [x19,2] mov w0, 0 @@ -15773,33 +15624,33 @@ nand_flash_init: mul w1, w2, w1 bl flash_ddr_para_scan ldrb w0, [x19,672] - cbnz w0, .L2564 + cbnz w0, .L2538 ldr x1, [x19,728] strb w0, [x1,19] bl flash_info_flush -.L2564: +.L2538: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2566 + tbz x0, 12, .L2540 adrp x2, .LANCHOR3 adrp x0, .LC127 add x2, x2, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC127 mov w1, 2356 - add x2, x2, 560 + add x2, x2, 536 bl printk -.L2566: +.L2540: bl nand_flash_print_info mov w22, 0 - b .L2597 -.L2603: + b .L2571 +.L2577: add x0, x20, :lo12:.LANCHOR2 add x0, x0, 376 ldrb w1, [x0,28] cmp w1, 3 - bne .L2541 + bne .L2515 strb wzr, [x0,28] - b .L2541 -.L2597: + b .L2515 +.L2571: mov w0, w22 ldr x27, [sp,80] ldp x19, x20, [sp,16] @@ -15826,19 +15677,19 @@ ftl_sysblk_dump: bl buf_alloc ldr x24, [x0,8] mov w20, 0 - adrp x22, .LC183 - adrp x23, .LC184 + adrp x22, .LC182 + adrp x23, .LC183 mov x27, x0 mov w19, w20 adrp x28, .LANCHOR0 - add x22, x22, :lo12:.LC183 - add x23, x23, :lo12:.LC184 + add x22, x22, :lo12:.LC182 + add x23, x23, :lo12:.LC183 add x24, x24, 704 -.L2605: +.L2579: add x3, x28, :lo12:.LANCHOR0 ldrh w1, [x3,3300] cmp w1, w19 - bls .L2617 + bls .L2591 ldrh w21, [x3,3350] ldr x1, [x27,8] ldr x2, [x27,24] @@ -15874,28 +15725,28 @@ ftl_sysblk_dump: mov w3, 32 bl rknand_print_hex cmp w26, 512 - beq .L2610 + beq .L2584 cmn w26, #1 - bne .L2606 -.L2610: + bne .L2580 +.L2584: mov w20, 1 -.L2606: +.L2580: add w19, w19, 1 uxth w19, w19 - b .L2605 -.L2617: + b .L2579 +.L2591: mov x0, x27 bl buf_free - cbz w20, .L2609 + cbz w20, .L2583 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 1339 - add x1, x1, 576 + add x1, x1, 552 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2609: +.L2583: sub sp, x29, #48 mov w0, w20 ldp x19, x20, [sp,64] @@ -15912,31 +15763,31 @@ ftl_sysblk_dump: .type dump_ftl_info, %function dump_ftl_info: stp x29, x30, [sp, -32]! - adrp x0, .LC185 + adrp x0, .LC184 add x29, sp, 0 str x19, [sp,16] adrp x19, .LANCHOR0 add x19, x19, :lo12:.LANCHOR0 - add x0, x0, :lo12:.LC185 + add x0, x0, :lo12:.LC184 ldrb w1, [x19,2834] bl printk adrp x3, .LANCHOR4 - adrp x0, .LC186 + adrp x0, .LC185 add x3, x3, :lo12:.LANCHOR4 - add x0, x0, :lo12:.LC186 + add x0, x0, :lo12:.LC185 ldrb w1, [x3,1536] ldrb w2, [x3,1537] ldrh w3, [x3,1538] bl printk ldr x2, [x19,2864] - adrp x0, .LC187 - add x0, x0, :lo12:.LC187 + adrp x0, .LC186 + add x0, x0, :lo12:.LC186 ldrh w1, [x2,130] ldrh w2, [x2,140] bl printk ldr x1, [x19,608] - adrp x0, .LC188 - add x0, x0, :lo12:.LC188 + adrp x0, .LC187 + add x0, x0, :lo12:.LC187 add x5, x1, 16 ldrh w1, [x1,16] ldrh w2, [x5,2] @@ -15945,8 +15796,8 @@ dump_ftl_info: ldrh w5, [x5,10] bl printk ldr x1, [x19,608] - adrp x0, .LC189 - add x0, x0, :lo12:.LC189 + adrp x0, .LC188 + add x0, x0, :lo12:.LC188 add x5, x1, 48 ldrh w1, [x1,48] ldrh w2, [x5,2] @@ -15955,8 +15806,8 @@ dump_ftl_info: ldrh w5, [x5,10] bl printk ldr x1, [x19,608] - adrp x0, .LC190 - add x0, x0, :lo12:.LC190 + adrp x0, .LC189 + add x0, x0, :lo12:.LC189 add x5, x1, 80 ldrh w1, [x1,80] ldrh w4, [x5,6] @@ -15969,32 +15820,32 @@ dump_ftl_info: ldrb w3, [x19,3276] ldr x1, [x19,3872] mul w3, w0, w3 - adrp x0, .LC191 - add x0, x0, :lo12:.LC191 + adrp x0, .LC190 + add x0, x0, :lo12:.LC190 lsl w3, w3, 1 bl rknand_print_hex ldr x1, [x19,600] - adrp x0, .LC192 + adrp x0, .LC191 ldrh w3, [x19,576] - add x0, x0, :lo12:.LC192 + add x0, x0, :lo12:.LC191 mov w2, 2 bl rknand_print_hex ldr x3, [x19,2864] - adrp x0, .LC184 - add x0, x0, :lo12:.LC184 + adrp x0, .LC183 + add x0, x0, :lo12:.LC183 mov w2, 4 add x1, x3, 704 ldrh w3, [x3,698] bl rknand_print_hex ldr x1, [x19,584] - adrp x0, .LC193 + adrp x0, .LC192 ldrh w3, [x19,576] - add x0, x0, :lo12:.LC193 + add x0, x0, :lo12:.LC192 mov w2, 4 bl rknand_print_hex - adrp x0, .LC194 + adrp x0, .LC193 add x1, x19, 3360 - add x0, x0, :lo12:.LC194 + add x0, x0, :lo12:.LC193 mov w2, 2 mov w3, 256 bl rknand_print_hex @@ -16003,8 +15854,8 @@ dump_ftl_info: ldrb w3, [x19,3276] ldr x1, [x19,3880] mul w3, w0, w3 - adrp x0, .LC195 - add x0, x0, :lo12:.LC195 + adrp x0, .LC194 + add x0, x0, :lo12:.LC194 lsl w3, w3, 1 bl rknand_print_hex ldr x19, [sp,16] @@ -16035,19 +15886,19 @@ pm_ppa_update_check: ubfx x3, x3, 5, 3 cmp w3, 7 cset w4, eq - cbnz w4, .L2623 + cbnz w4, .L2597 cmp w3, w7 - bne .L2620 -.L2623: + bne .L2594 +.L2597: mov w3, w2 mov w2, w1 mov x1, x0 - adrp x0, .LC196 - add x0, x0, :lo12:.LC196 + adrp x0, .LC195 + add x0, x0, :lo12:.LC195 bl printk bl dump_ftl_info mov w4, -1 -.L2620: +.L2594: mov w0, w4 ldp x29, x30, [sp], 16 ret @@ -16063,26 +15914,26 @@ load_l2p_region: stp x19, x20, [sp,16] cmp w22, 31 uxth w20, w0 - bls .L2626 + bls .L2600 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 31 - add x1, x1, 592 + add x1, x1, 568 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2626: +.L2600: adrp x21, .LANCHOR0 adrp x19, .LANCHOR7 add x21, x21, :lo12:.LANCHOR0 ldr x0, [x21,2864] ldrh w2, [x0,698] cmp w20, w2 - bls .L2627 - adrp x0, .LC197 + bls .L2601 + adrp x0, .LC196 mov w1, w20 - add x0, x0, :lo12:.LC197 + add x0, x0, :lo12:.LC196 add x19, x19, :lo12:.LANCHOR7 bl printk mov x0, 0 @@ -16093,15 +15944,15 @@ load_l2p_region: ldr x0, [x21,2864] ldrh w0, [x0,698] cmp w0, w20 - bcs .L2629 + bcs .L2603 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC0 - add x1, x1, 592 + add x1, x1, 568 mov w2, 35 - b .L2633 -.L2627: + b .L2607 +.L2601: add x0, x0, x20, sxtw 2 sbfiz x22, x22, 4, 32 ldr w4, [x0,704] @@ -16109,19 +15960,19 @@ load_l2p_region: add x23, x0, x22 strh w20, [x0,x22] strh wzr, [x23,2] - cbnz w4, .L2630 - adrp x0, .LC198 + cbnz w4, .L2604 + adrp x0, .LC197 mov w1, w20 mov w2, w4 add x19, x19, :lo12:.LANCHOR7 - add x0, x0, :lo12:.LC198 + add x0, x0, :lo12:.LC197 bl printk ldr x0, [x23,8] mov w1, 255 ldrh w2, [x19,-118] bl ftl_memset - b .L2629 -.L2630: + b .L2603 +.L2604: add x22, x19, :lo12:.LANCHOR7 ldrb w3, [x21,2832] ldr x1, [x23,8] @@ -16134,47 +15985,47 @@ load_l2p_region: ldr x4, [x29,72] ldr w2, [x0] cmp w2, w20 - beq .L2631 - adrp x0, .LC199 + beq .L2605 + adrp x0, .LC198 mov w1, w20 - add x0, x0, :lo12:.LC199 + add x0, x0, :lo12:.LC198 bl printk ldr x3, [x21,2864] - adrp x0, .LC200 - add x0, x0, :lo12:.LC200 + adrp x0, .LC199 + add x0, x0, :lo12:.LC199 mov w2, 4 add x1, x3, 704 ldrh w3, [x3,698] bl rknand_print_hex ldrb w3, [x21,2832] - adrp x0, .LC201 + adrp x0, .LC200 ldr x1, [x23,8] - add x0, x0, :lo12:.LC201 + add x0, x0, :lo12:.LC200 mov w2, 4 lsl w3, w3, 7 bl rknand_print_hex - adrp x0, .LC202 + adrp x0, .LC201 ldr x1, [x22,-128] - add x0, x0, :lo12:.LC202 + add x0, x0, :lo12:.LC201 mov w2, 4 mov w3, 16 bl rknand_print_hex -.L2631: +.L2605: add x19, x19, :lo12:.LANCHOR7 ldr x0, [x19,-128] ldr w0, [x0] cmp w0, w20 - beq .L2629 + beq .L2603 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 add x0, x0, :lo12:.LC0 - add x1, x1, 592 + add x1, x1, 568 mov w2, 59 -.L2633: +.L2607: bl printk bl dump_stack -.L2629: +.L2603: mov w0, 0 ldr x23, [sp,48] ldp x19, x20, [sp,16] @@ -16201,24 +16052,24 @@ pm_gc: ldrh w0, [x19,1164] sub w0, w0, #1 cmp w1, w0 - blt .L2636 + blt .L2610 bl pm_free_sblk ldr x2, [x20,2864] ldrh w1, [x19,1164] ldrh w3, [x2,688] sub w1, w1, #1 cmp w3, w1 - blt .L2636 + blt .L2610 add x0, x2, x0, uxth 1 ldrh w21, [x0,416] mov w0, 65535 cmp w21, w0 - bne .L2638 + bne .L2612 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 mov w2, 131 - add x1, x1, 608 + add x1, x1, 584 add x0, x0, :lo12:.LC0 bl printk bl dump_stack @@ -16226,7 +16077,7 @@ pm_gc: ldr x1, [x20,2864] add x0, x1, x0, uxth 1 ldrh w21, [x0,416] -.L2638: +.L2612: bl pm_select_ram_region uxth x20, w0 add x0, x23, :lo12:.LANCHOR0 @@ -16237,27 +16088,27 @@ pm_gc: ldrh w0, [x0,x1] mov w1, 65535 cmp w0, w1 - beq .L2639 + beq .L2613 ldr x1, [x19,8] - cbz x1, .L2639 + cbz x1, .L2613 ldrsh w2, [x19,2] - tbz w2, #31, .L2639 + tbz w2, #31, .L2613 bl pm_write_page ldrh w0, [x19,2] and w0, w0, 32767 strh w0, [x19,2] -.L2639: +.L2613: add x23, x23, :lo12:.LANCHOR0 mov w19, 0 add x0, x23, 3904 mov w24, 21 mov w25, 1 add x20, x0, x20, lsl 4 -.L2640: +.L2614: ldr x0, [x23,2864] ldrh w1, [x0,698] cmp w1, w19 - bls .L2646 + bls .L2620 ldrh w1, [x23,3340] add x0, x0, x19, sxtw 2 ldr w0, [x0,704] @@ -16269,7 +16120,7 @@ pm_gc: ldrb w0, [x23,3338] udiv w1, w1, w0 cmp w21, w1, uxth - bne .L2641 + bne .L2615 mov w1, w22 mov w0, w19 bl load_l2p_region @@ -16278,13 +16129,13 @@ pm_gc: bl pm_write_page mov w0, -1 strh w0, [x20] -.L2641: +.L2615: add w19, w19, 1 uxth w19, w19 - b .L2640 -.L2646: + b .L2614 +.L2620: bl pm_free_sblk -.L2636: +.L2610: mov w0, 0 ldr x25, [sp,64] ldp x19, x20, [sp,16] @@ -16312,10 +16163,10 @@ pm_flush_id: and w0, w0, 32767 strh w0, [x20,2] ldr w0, [x19,3896] - cbz w0, .L2648 + cbz w0, .L2622 bl pm_gc str wzr, [x19,3896] -.L2648: +.L2622: mov w0, 0 ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 @@ -16332,16 +16183,16 @@ pm_flush: mov x19, 0 add x20, x20, :lo12:.LANCHOR0 add x20, x20, 3904 -.L2654: +.L2628: add x1, x20, x19, lsl 4 uxth w0, w19 ldrsh w1, [x1,2] - tbz w1, #31, .L2653 + tbz w1, #31, .L2627 bl pm_flush_id -.L2653: +.L2627: add x19, x19, 1 cmp x19, 32 - bne .L2654 + bne .L2628 mov w0, 0 ldp x19, x20, [sp,16] ldp x29, x30, [sp], 32 @@ -16398,19 +16249,19 @@ pm_init: mov w24, -1 str x0, [x22,-128] add x22, x20, 512 -.L2660: +.L2634: strh w24, [x20] strh wzr, [x20,2] - cbz w23, .L2659 + cbz w23, .L2633 add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,2832] lsl w0, w0, 9 bl ftl_malloc str x0, [x20,8] -.L2659: +.L2633: add x20, x20, 16 cmp x20, x22 - bne .L2660 + bne .L2634 add x20, x19, :lo12:.LANCHOR0 add x21, x21, :lo12:.LANCHOR7 mov w4, 4 @@ -16427,20 +16278,20 @@ pm_init: mov w24, w21 ldrh w2, [x1,696] cmp w2, w21 - bgt .L2661 - adrp x0, .LC203 + bgt .L2635 + adrp x0, .LC202 ldrh w1, [x1,692] mov w3, w21 - add x0, x0, :lo12:.LC203 - adrp x26, .LC204 + add x0, x0, :lo12:.LC202 + adrp x26, .LC203 add w21, w21, 1 bl printk - add x26, x26, :lo12:.LC204 + add x26, x26, :lo12:.LC203 ldr x0, [x20,2864] ldrsh w20, [x0,696] -.L2662: +.L2636: cmp w20, w21 - bge .L2675 + bge .L2649 add x27, x19, :lo12:.LANCHOR0 mov x2, x23 mov x3, x25 @@ -16463,21 +16314,21 @@ pm_init: ldr w1, [x25] bl printk cmp w28, 512 - beq .L2663 + beq .L2637 cmn w28, #1 - beq .L2663 + beq .L2637 ldr x1, [x27,2864] ldr w0, [x25] ldrh w2, [x1,698] cmp w0, w2 - bcs .L2663 + bcs .L2637 add x0, x1, x0, uxtw 2 str w22, [x0,704] -.L2663: +.L2637: add w20, w20, 1 sxth w20, w20 - b .L2662 -.L2675: + b .L2636 +.L2649: add x19, x19, :lo12:.LANCHOR0 adrp x0, .LANCHOR5+577 mov w1, 1 @@ -16492,7 +16343,7 @@ pm_init: ldr x1, [x19,3912] mov w0, -1 bl pm_write_page -.L2661: +.L2635: bl pm_free_sblk bl pm_gc mov w0, 0 @@ -16530,28 +16381,28 @@ pm_log2phys: uxth w25, w20 msub w24, w25, w24, w0 uxth x24, w24 - bcc .L2688 - adrp x0, .LC205 + bcc .L2662 + adrp x0, .LC204 mov w1, w5 - add x0, x0, :lo12:.LC205 + add x0, x0, :lo12:.LC204 bl printk mov w0, -1 - b .L2678 -.L2692: + b .L2652 +.L2666: ldrh w0, [x3] cmp w0, w25 - beq .L2680 -.L2679: + beq .L2654 +.L2653: add w19, w19, 1 add x3, x3, 16 uxth x19, w19 cmp w19, 32 - beq .L2691 -.L2688: + beq .L2665 +.L2662: ldr x0, [x3,8] - cbnz x0, .L2692 - b .L2679 -.L2691: + cbnz x0, .L2666 + b .L2653 +.L2665: bl pm_select_ram_region uxth x19, w0 add x2, x21, :lo12:.LANCHOR0 @@ -16562,21 +16413,21 @@ pm_log2phys: ldrh w3, [x2,x3] mov w2, 65535 cmp w3, w2 - bne .L2693 -.L2684: + bne .L2667 +.L2658: adrp x0, .LANCHOR7-116 strb w19, [x0,#:lo12:.LANCHOR7-116] mov w0, w25 bl load_l2p_region -.L2680: - cbnz w23, .L2681 +.L2654: + cbnz w23, .L2655 add x0, x21, :lo12:.LANCHOR0 add x0, x0, x19, lsl 4 ldr x0, [x0,3912] ldr w0, [x0,x24,lsl 2] str w0, [x22] - b .L2682 -.L2681: + b .L2656 +.L2655: add x0, x21, :lo12:.LANCHOR0 ldr w2, [x22] add x0, x0, 3904 @@ -16588,7 +16439,7 @@ pm_log2phys: strh w1, [x0,2] adrp x0, .LANCHOR4+64 strb w20, [x0,#:lo12:.LANCHOR4+64] -.L2682: +.L2656: add x21, x21, :lo12:.LANCHOR0 mov w2, 32767 add x21, x21, 3904 @@ -16597,18 +16448,18 @@ pm_log2phys: ldrh w1, [x19,2] and w3, w1, 32767 cmp w3, w2 - beq .L2678 + beq .L2652 add w1, w1, 1 strh w1, [x19,2] - b .L2678 -.L2693: + b .L2652 +.L2667: ldrsh w2, [x4,2] - tbz w2, #31, .L2684 + tbz w2, #31, .L2658 str x1, [x29,88] bl pm_flush_id ldr x1, [x29,88] - b .L2684 -.L2678: + b .L2658 +.L2652: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -16642,7 +16493,7 @@ gc_recovery: add x22, x21, 80 cmp w1, w0 ldr x0, [x24,608] - beq .L2695 + beq .L2669 mov w1, -1 strh w1, [x0,130] mov w0, 1 @@ -16657,37 +16508,37 @@ gc_recovery: ldrb w1, [x24,3257] str w0, [x29,152] cmp w1, 3 - bne .L2696 + bne .L2670 ldrh w1, [x24,3300] sub w1, w1, #1 add w0, w1, w0 orr w0, w0, 50331648 - b .L2739 -.L2696: + b .L2713 +.L2670: cmp w1, 2 - bne .L2697 + bne .L2671 ldrh w1, [x24,3300] add w0, w0, w1, lsl 1 sub w0, w0, #1 orr w0, w0, 33554432 -.L2739: +.L2713: str w0, [x19,40] -.L2697: +.L2671: mov x0, x19 mov w1, 1 bl sblk_read_page ldr w0, [x19,52] cmp w0, 512 - beq .L2698 + beq .L2672 cmn w0, #1 - beq .L2698 + beq .L2672 ldr x0, [x19,24] ldr w1, [x0] mov w0, 15555 movk w0, 0xf55f, lsl 16 cmp w1, w0 - beq .L2699 -.L2698: + beq .L2673 +.L2672: mov x0, x19 bl buf_free ldr x7, [x19,24] @@ -16698,8 +16549,8 @@ gc_recovery: str w0, [sp,8] ldr w0, [x7,12] str w0, [sp,16] - adrp x0, .LC206 - add x0, x0, :lo12:.LC206 + adrp x0, .LC205 + add x0, x0, :lo12:.LC205 ldr w3, [x6] ldr w4, [x6,4] ldr w5, [x6,8] @@ -16708,8 +16559,8 @@ gc_recovery: ldr w6, [x6,12] ldr w7, [x7] bl printk - b .L2742 -.L2699: + b .L2716 +.L2673: add x24, x20, :lo12:.LANCHOR0 ldr x0, [x29,136] ldr x1, [x19,8] @@ -16731,28 +16582,28 @@ gc_recovery: ldrb w26, [x24,3257] ldrh w25, [x24,3300] cmp w26, 2 - bne .L2701 + bne .L2675 lsl w25, w25, 1 mov w26, 1 -.L2701: +.L2675: mov w23, 0 - adrp x24, .LC207 - add x0, x24, :lo12:.LC207 + adrp x24, .LC206 + add x0, x24, :lo12:.LC206 mov w27, w23 str x0, [x29,112] - b .L2702 -.L2744: + b .L2676 +.L2718: ldr x0, [x0,1144] ldr w1, [x0,x12] ldr w0, [x7,8] cmp w1, w0 - bne .L2706 -.L2729: + bne .L2680 +.L2703: add w27, w27, 1 add w28, w28, 1 -.L2710: +.L2684: cmp w28, w26 - bhi .L2743 + bhi .L2717 ldr x0, [x29,128] add x1, x20, :lo12:.LANCHOR0 add x0, x0, 8 @@ -16762,10 +16613,10 @@ gc_recovery: cmp w1, 3 mul w0, w0, w2 str w0, [x29,152] - bne .L2703 + bne .L2677 add w0, w0, w23 orr w0, w0, w28, lsl 24 -.L2740: +.L2714: str w0, [x19,40] mov w1, 1 mov x0, x19 @@ -16778,8 +16629,8 @@ gc_recovery: ldr x1, [x0,1136] ldr w3, [x1,x12] cmp w3, w6 - beq .L2744 -.L2706: + beq .L2718 +.L2680: ldr x0, [x29,136] str x12, [x29,104] add x13, x0, :lo12:.LANCHOR4 @@ -16799,10 +16650,10 @@ gc_recovery: ldr x0, [x13,1136] ldr w0, [x0,x12] cmn w0, #1 - beq .L2729 + beq .L2703 mov x0, x19 bl buf_free -.L2742: +.L2716: add x0, x20, :lo12:.LANCHOR0 ldrh w2, [x21,80] mov w28, 0 @@ -16811,38 +16662,38 @@ gc_recovery: ldr x0, [x0,608] ldrh w1, [x21,80] strh w1, [x0,130] - b .L2700 -.L2709: + b .L2674 +.L2683: add w23, w23, 1 -.L2702: +.L2676: cmp w23, w25 - beq .L2711 + beq .L2685 sub w0, w23, #1 mov w24, 0 str w0, [x29,124] -.L2712: +.L2686: ldrb w0, [x22,9] cmp w24, w0 - bge .L2709 + bge .L2683 sxtw x0, w24 mov w28, 1 str x0, [x29,128] - b .L2710 -.L2703: + b .L2684 +.L2677: cmp w1, 2 - bne .L2705 + bne .L2679 ldr w1, [x29,124] add w0, w0, w1 add w0, w0, w28 orr w0, w0, 33554432 - b .L2740 -.L2705: + b .L2714 +.L2679: add w0, w0, w23 - b .L2740 -.L2743: + b .L2714 +.L2717: add w24, w24, 1 - b .L2712 -.L2711: + b .L2686 +.L2685: mov x0, x19 mov w28, 0 mov w27, w28 @@ -16855,22 +16706,22 @@ gc_recovery: ldrh w0, [x0,3274] mul w0, w1, w0 strh w0, [x2,x3,lsl 1] -.L2713: +.L2687: cmp w27, w25 - beq .L2724 + beq .L2698 sub w0, w27, #1 mov w24, 0 str w0, [x29,104] -.L2725: +.L2699: ldrb w0, [x22,9] cmp w24, w0 - bge .L2722 + bge .L2696 sxtw x0, w24 mov w23, 1 str x0, [x29,112] -.L2723: +.L2697: cmp w23, w26 - bhi .L2745 + bhi .L2719 ldr x1, [x29,136] ldr w0, [x29,128] add x1, x1, :lo12:.LANCHOR4 @@ -16878,7 +16729,7 @@ gc_recovery: ldr x2, [x1,1136] ldr w6, [x2,x0] cmn w6, #1 - beq .L2714 + beq .L2688 ldr x1, [x1,1144] str x6, [x29,96] ldr w0, [x1,x0] @@ -16888,13 +16739,13 @@ gc_recovery: str w0, [x29,156] cmn w0, #1 ldr x6, [x29,96] - bne .L2715 + bne .L2689 mov w0, w6 add x1, x29, 156 mov w2, 0 bl pm_log2phys ldr x6, [x29,96] -.L2715: +.L2689: ldr x0, [x29,112] add x0, x0, 8 ldrh w1, [x22,x0,lsl 1] @@ -16903,21 +16754,21 @@ gc_recovery: ldrb w0, [x0,3257] cmp w0, 3 mul w1, w1, w2 - bne .L2716 + bne .L2690 add w1, w1, w27 orr w1, w1, w23, lsl 24 - b .L2741 -.L2716: + b .L2715 +.L2690: cmp w0, 2 - bne .L2718 + bne .L2692 ldr w0, [x29,104] add w1, w1, w0 add w1, w1, w23 orr w1, w1, 33554432 - b .L2741 -.L2718: + b .L2715 +.L2692: add w1, w1, w27 -.L2741: +.L2715: add x0, x20, :lo12:.LANCHOR0 ldr w2, [x29,124] str w1, [x29,152] @@ -16935,19 +16786,19 @@ gc_recovery: ldr w1, [x29,124] cmp w0, w1 uxth x19, w19 - bne .L2719 + bne .L2693 mov w0, w6 add x1, x29, 152 add w28, w28, 1 bl pm_log2phys mov w0, w19 bl ftl_vpn_decrement - b .L2720 -.L2719: + b .L2694 +.L2693: ldr w1, [x29,152] cmp w0, w1 csinc w28, w28, w28, ne -.L2720: +.L2694: ldr w0, [x29,128] add x1, x20, :lo12:.LANCHOR0 add w0, w0, 1 @@ -16956,31 +16807,31 @@ gc_recovery: add x0, x0, x19, lsl 2 ldrb w0, [x0,2] ands w0, w0, 224 - bne .L2714 + bne .L2688 lsl x19, x19, 1 ldr x1, [x1,600] ldrh w2, [x1,x19] - cbz w2, .L2714 + cbz w2, .L2688 strh w0, [x1,x19] -.L2714: +.L2688: add w23, w23, 1 - b .L2723 -.L2745: + b .L2697 +.L2719: add w24, w24, 1 - b .L2725 -.L2722: + b .L2699 +.L2696: add w27, w27, 1 - b .L2713 -.L2724: + b .L2687 +.L2698: add x0, x20, :lo12:.LANCHOR0 ldrh w1, [x21,80] ldr x0, [x0,600] strh w28, [x0,x1,lsl 1] -.L2700: +.L2674: ldrh w1, [x21,80] - adrp x0, .LC208 + adrp x0, .LC207 mov w2, w28 - add x0, x0, :lo12:.LC208 + add x0, x0, :lo12:.LC207 bl printk mov w0, -1 strh w0, [x21,80] @@ -16991,9 +16842,9 @@ gc_recovery: ldr x0, [x0,608] ldrh w0, [x0,130] cmp w0, w1 - beq .L2726 + beq .L2700 bl ftl_free_sblk -.L2726: +.L2700: add x20, x20, :lo12:.LANCHOR0 mov w0, -1 ldr x1, [x20,2864] @@ -17002,15 +16853,15 @@ gc_recovery: strh w0, [x1,130] mov w0, 0 bl ftl_info_flush - b .L2694 -.L2695: + b .L2668 +.L2669: ldrh w0, [x0,130] cmp w0, w1 - beq .L2694 + beq .L2668 ldr x1, [x24,2864] ldrh w1, [x1,126] cmp w1, w0 - bne .L2728 + bne .L2702 bl pm_flush ldr x0, [x24,608] ldrh w0, [x0,130] @@ -17020,12 +16871,12 @@ gc_recovery: strh w1, [x0,126] mov w0, 0 bl ftl_info_flush -.L2728: +.L2702: add x20, x20, :lo12:.LANCHOR0 mov w1, -1 ldr x0, [x20,608] strh w1, [x0,130] -.L2694: +.L2668: sub sp, x29, #32 ldp x19, x20, [sp,48] ldp x21, x22, [sp,64] @@ -17091,14 +16942,14 @@ zftl_init: strh w7, [x20,576] mov x20, x11 strh w10, [x23,-118] -.L2747: +.L2721: cmp w2, w4 - bhi .L2813 + bhi .L2787 add w1, w1, 1 lsl w2, w2, 1 uxth w1, w1 - b .L2747 -.L2813: + b .L2721 +.L2787: mul w3, w0, w3 add x2, x19, :lo12:.LANCHOR0 sub w1, w1, #1 @@ -17107,14 +16958,14 @@ zftl_init: mov w1, 1 lsr w4, w5, 21 mov w2, 0 -.L2749: +.L2723: cmp w1, w4 - bhi .L2814 + bhi .L2788 add w2, w2, 1 lsl w1, w1, 1 uxth w2, w2 - b .L2749 -.L2814: + b .L2723 +.L2788: mov w1, 57344 mov w4, 1 movk w1, 0x1c, lsl 16 @@ -17151,10 +17002,10 @@ zftl_init: lsr w0, w7, 4 strh w0, [x4,3306] cmp w0, 79 - bhi .L2751 + bhi .L2725 mov w0, 80 strh w0, [x4,3306] -.L2751: +.L2725: add x0, x19, :lo12:.LANCHOR0 mov w2, 2000 mov w3, 256 @@ -17168,10 +17019,10 @@ zftl_init: strh w3, [x2,1162] mov w2, 32 strh w2, [x0,592] - beq .L2752 + beq .L2726 ldrb w0, [x0,3272] - cbz w0, .L2753 -.L2752: + cbz w0, .L2727 +.L2726: add x0, x19, :lo12:.LANCHOR0 mov w2, 150 mov w3, 64 @@ -17181,84 +17032,84 @@ zftl_init: mov w3, 12 strh w3, [x0,592] ldrb w3, [x19,#:lo12:.LANCHOR0] - cbnz w3, .L2753 + cbnz w3, .L2727 mov w3, 4 strh w3, [x0,592] mov w3, 600 strh w3, [x0,3346] mov w0, 128 strh w0, [x2,1160] -.L2753: +.L2727: + ldr w0, [x20,#:lo12:.LANCHOR2] + tbz x0, 12, .L2729 + adrp x0, .LC208 + add x0, x0, :lo12:.LC208 + bl printk +.L2729: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2755 + tbz x0, 12, .L2730 + add x1, x19, :lo12:.LANCHOR0 adrp x0, .LC209 add x0, x0, :lo12:.LC209 + ldr w1, [x1,2836] bl printk -.L2755: +.L2730: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2756 + tbz x0, 12, .L2731 add x1, x19, :lo12:.LANCHOR0 adrp x0, .LC210 add x0, x0, :lo12:.LC210 - ldr w1, [x1,2836] + ldr w1, [x1,2840] bl printk -.L2756: +.L2731: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2757 - add x1, x19, :lo12:.LANCHOR0 + tbz x0, 12, .L2732 + add x1, x21, :lo12:.LANCHOR7 adrp x0, .LC211 add x0, x0, :lo12:.LC211 - ldr w1, [x1,2840] + ldr w1, [x1,-108] bl printk -.L2757: +.L2732: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2758 + tbz x0, 12, .L2733 add x1, x21, :lo12:.LANCHOR7 adrp x0, .LC212 add x0, x0, :lo12:.LC212 - ldr w1, [x1,-108] + ldrh w1, [x1,-104] bl printk -.L2758: +.L2733: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2759 + tbz x0, 12, .L2734 add x1, x21, :lo12:.LANCHOR7 adrp x0, .LC213 add x0, x0, :lo12:.LC213 - ldrh w1, [x1,-104] + ldrh w1, [x1,-118] bl printk -.L2759: +.L2734: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2760 - add x1, x21, :lo12:.LANCHOR7 + tbz x0, 12, .L2735 + add x22, x22, :lo12:.LANCHOR4 adrp x0, .LC214 add x0, x0, :lo12:.LC214 - ldrh w1, [x1,-118] + ldrh w1, [x22,1164] bl printk -.L2760: +.L2735: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2761 - add x22, x22, :lo12:.LANCHOR4 + tbz x0, 12, .L2736 + add x1, x19, :lo12:.LANCHOR0 adrp x0, .LC215 add x0, x0, :lo12:.LC215 - ldrh w1, [x22,1164] + ldrh w1, [x1,3306] bl printk -.L2761: +.L2736: ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2762 + tbz x0, 12, .L2737 add x1, x19, :lo12:.LANCHOR0 adrp x0, .LC216 add x0, x0, :lo12:.LC216 - ldrh w1, [x1,3306] - bl printk -.L2762: - ldr w0, [x20,#:lo12:.LANCHOR2] - tbz x0, 12, .L2763 - add x1, x19, :lo12:.LANCHOR0 - adrp x0, .LC217 - add x0, x0, :lo12:.LC217 ldrh w1, [x1,3308] bl printk -.L2763: +.L2737: add x22, x19, :lo12:.LANCHOR0 bl buf_init mov w0, 6 @@ -17287,11 +17138,11 @@ zftl_init: ldr w0, [x20,#:lo12:.LANCHOR2] add x1, x2, x1, sxtw 2 str x1, [x22,608] - tbz x0, 12, .L2764 - adrp x0, .LC218 - add x0, x0, :lo12:.LC218 + tbz x0, 12, .L2738 + adrp x0, .LC217 + add x0, x0, :lo12:.LC217 bl printk -.L2764: +.L2738: add x2, x19, :lo12:.LANCHOR0 add x3, x21, :lo12:.LANCHOR7 ldrh w0, [x2,3300] @@ -17306,28 +17157,28 @@ zftl_init: add w24, w24, 704 lsl w22, w22, 1 add w22, w22, 632 - tbz x0, 12, .L2765 - adrp x0, .LC219 + tbz x0, 12, .L2739 + adrp x0, .LC218 ldrh w3, [x3,-118] - add x0, x0, :lo12:.LC219 + add x0, x0, :lo12:.LC218 mov w1, w22 mov w2, w24 bl printk -.L2765: +.L2739: add x21, x21, :lo12:.LANCHOR7 ldrh w0, [x21,-118] cmp w22, w0 - bhi .L2767 + bhi .L2741 cmp w24, w0 - bls .L2766 -.L2767: -.L2768: - b .L2768 -.L2766: + bls .L2740 +.L2741: +.L2742: + b .L2742 +.L2740: bl sblk_init bl ftl_info_blk_init cmn w0, #1 - beq .L2769 + beq .L2743 bl ftl_ext_info_init add x19, x19, :lo12:.LANCHOR0 mov w0, 1 @@ -17360,18 +17211,18 @@ zftl_init: mov w0, 1 bl ftl_total_vpn_update ldrb w0, [x23,577] - cbz w0, .L2770 + cbz w0, .L2744 ldr x1, [x19,2864] ldr w0, [x1,68] add w0, w0, 1 str w0, [x1,68] -.L2770: +.L2744: bl ftl_ext_info_flush mov w0, 0 bl ftl_info_flush bl print_ftl_debug_info mov w0, 0 -.L2769: +.L2743: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -17397,11 +17248,11 @@ rk_ftl_init: strb wzr, [x21,-102] bl ftl_malloc str x0, [x19,1176] - cbnz x0, .L2816 -.L2818: + cbnz x0, .L2790 +.L2792: mov w0, -1 - b .L2817 -.L2816: + b .L2791 +.L2790: mov w0, 2048 bl ftl_malloc str x0, [x21,-96] @@ -17411,7 +17262,7 @@ rk_ftl_init: str xzr, [x1,-88]! bl rknand_get_reg_addr ldr x0, [x19,1184] - cbz x0, .L2818 + cbz x0, .L2792 bl rk_nandc_irq_init mov w1, 0 ldr x0, [x21,-96] @@ -17471,14 +17322,14 @@ rk_ftl_init: ldr x0, [x19,1184] bl nand_flash_init mov w22, w0 - cbnz w0, .L2819 + cbnz w0, .L2793 bl zftl_init mov w19, w0 bl zftl_proc_debug_init mov w0, 1 strb w0, [x21,-102] - b .L2820 -.L2819: + b .L2794 +.L2793: ldr x1, [x19,1176] adrp x2, ftl_read_flash_info add x2, x2, :lo12:ftl_read_flash_info @@ -17533,7 +17384,7 @@ rk_ftl_init: bl FlashInit mov w19, w0 cmn w22, #2 - bne .L2821 + bne .L2795 add x22, x21, :lo12:.LANCHOR2 adrp x1, gNandParaInfo add x22, x22, 376 @@ -17543,22 +17394,22 @@ rk_ftl_init: bl ftl_memcpy ldrb w0, [x22,18] bl flash_lsb_page_tbl_build -.L2821: +.L2795: adrp x0, g_nandc_version_data ldr w1, [x0,#:lo12:g_nandc_version_data] mov w0, 12336 movk w0, 0x5638, lsl 16 cmp w1, w0 adrp x1, .LANCHOR0 - bne .L2822 + bne .L2796 adrp x0, gFlashSlcMode ldrb w0, [x0,#:lo12:gFlashSlcMode] - cbnz w0, .L2823 -.L2822: + cbnz w0, .L2797 +.L2796: add x0, x20, :lo12:.LANCHOR4 strb wzr, [x1,#:lo12:.LANCHOR0] strb wzr, [x0,1264] -.L2823: +.L2797: adrp x2, gNandFlashIDBEccBits add x0, x1, :lo12:.LANCHOR0 add x21, x21, :lo12:.LANCHOR2 @@ -17572,28 +17423,28 @@ rk_ftl_init: strb w2, [x0,724] mov w2, 1 mov w0, 0 -.L2824: +.L2798: cmp w2, w3 - bhi .L2829 + bhi .L2803 add w0, w0, 1 lsl w2, w2, 1 uxth w0, w0 - b .L2824 -.L2829: + b .L2798 +.L2803: add x1, x1, :lo12:.LANCHOR0 sub w0, w0, #1 strb wzr, [x1,672] strh w0, [x1,3340] - cbnz w19, .L2820 + cbnz w19, .L2794 bl FtlInit mov w19, w0 -.L2820: - adrp x0, .LC220 +.L2794: + adrp x0, .LC219 mov w1, w19 - add x0, x0, :lo12:.LC220 + add x0, x0, :lo12:.LC219 bl printk mov w0, w19 -.L2817: +.L2791: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x29, x30, [sp], 48 @@ -17621,12 +17472,12 @@ gc_update_l2p_map_new: mul w24, w24, w0 bl timer_get_time ldr w0, [x22,#:lo12:.LANCHOR2] - tbz x0, 8, .L2831 - adrp x0, .LC221 + tbz x0, 8, .L2805 + adrp x0, .LC220 ldrh w1, [x20,80] - add x0, x0, :lo12:.LC221 + add x0, x0, :lo12:.LC220 bl printk -.L2831: +.L2805: add x0, x19, :lo12:.LANCHOR0 ldrh w1, [x20,80] sub w2, w24, #1 @@ -17635,21 +17486,21 @@ gc_update_l2p_map_new: adrp x27, .LANCHOR4 ldr x0, [x0,600] strh w2, [x0,x1,lsl 1] - adrp x0, .LC223 - add x0, x0, :lo12:.LC223 - str x0, [x29,120] adrp x0, .LC222 add x0, x0, :lo12:.LC222 + str x0, [x29,120] + adrp x0, .LC221 + add x0, x0, :lo12:.LC221 str x0, [x29,112] -.L2832: +.L2806: cmp w23, w24 - beq .L2864 + beq .L2838 adrp x0, .LANCHOR4 add x0, x0, :lo12:.LANCHOR4 ldr x0, [x0,1136] ldr w2, [x0,w23,sxtw 2] cmn w2, #1 - beq .L2833 + beq .L2807 add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,2832] lsl w0, w0, 7 @@ -17657,27 +17508,27 @@ gc_update_l2p_map_new: and w0, w0, 65535 str w0, [x29,140] ldr w0, [x22,#:lo12:.LANCHOR2] - tbz x0, 8, .L2834 + tbz x0, 8, .L2808 ldr x0, [x29,112] mov w3, w23 ldr w1, [x29,140] bl printk -.L2834: +.L2808: mov w25, w23 -.L2840: +.L2814: add x1, x27, :lo12:.LANCHOR4 sbfiz x26, x25, 2, 32 ldr x0, [x1,1136] ldr w4, [x0,x26] cmn w4, #1 - beq .L2835 + beq .L2809 add x0, x19, :lo12:.LANCHOR0 ldr w2, [x29,140] ldrb w0, [x0,2832] lsl w0, w0, 7 udiv w0, w4, w0 cmp w2, w0, uxth - bne .L2835 + bne .L2809 ldr x0, [x1,1144] str x4, [x29,104] ldr w28, [x0,x26] @@ -17686,16 +17537,16 @@ gc_update_l2p_map_new: str w0, [x29,156] cmn w0, #1 ldr x4, [x29,104] - bne .L2836 + bne .L2810 mov w0, w4 add x1, x29, 156 mov w2, 0 bl pm_log2phys ldr x4, [x29,104] -.L2836: +.L2810: ldr w3, [x29,156] cmp w3, w28 - bne .L2837 + bne .L2811 add x0, x27, :lo12:.LANCHOR4 add x1, x29, 152 mov w2, 1 @@ -17716,60 +17567,60 @@ gc_update_l2p_map_new: and w28, w0, w28 ldrb w0, [x2,3338] udiv w0, w28, w0 - b .L2863 -.L2837: + b .L2837 +.L2811: ldr w0, [x22,#:lo12:.LANCHOR2] - tbz x0, 8, .L2839 + tbz x0, 8, .L2813 ldr x0, [x29,120] mov w1, w4 mov w2, w28 bl printk -.L2839: +.L2813: ldr x0, [x29,128] ldrh w0, [x0] -.L2863: +.L2837: bl ftl_vpn_decrement add x0, x27, :lo12:.LANCHOR4 mov w1, -1 ldr x0, [x0,1136] str w1, [x0,x26] bl timer_get_time -.L2835: +.L2809: add w25, w25, 1 cmp w25, w24 - bne .L2840 -.L2833: + bne .L2814 +.L2807: add w23, w23, 1 - b .L2832 -.L2864: + b .L2806 +.L2838: ldr w0, [x22,#:lo12:.LANCHOR2] - tbz x0, 8, .L2842 + tbz x0, 8, .L2816 add x0, x19, :lo12:.LANCHOR0 ldrh w3, [x20,80] ldr x1, [x0,608] ldr x2, [x0,600] - adrp x0, .LC224 - add x0, x0, :lo12:.LC224 + adrp x0, .LC223 + add x0, x0, :lo12:.LC223 ldrh w1, [x1,80] ldrh w2, [x2,x3,lsl 1] mov w3, w21 bl printk -.L2842: +.L2816: add x0, x19, :lo12:.LANCHOR0 ldrh w1, [x20,80] ldr x0, [x0,600] ldrh w0, [x0,x1,lsl 1] cmp w0, w21 - beq .L2843 + beq .L2817 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 483 - add x1, x1, 616 + mov w2, 488 + add x1, x1, 592 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2843: +.L2817: add x19, x19, :lo12:.LANCHOR0 ldrh w1, [x20,80] ldr x0, [x19,600] @@ -17804,48 +17655,48 @@ gc_scan_src_blk_one_page: ldrb w7, [x3,3276] ldrh w1, [x1,40] ldrh w3, [x2,2] -.L2866: +.L2840: cmp w1, w6 - bne .L2908 + bne .L2882 add w0, w0, 1 uxtb w0, w0 cmp w0, w7 - bne .L2867 + bne .L2841 add w3, w3, 1 mov w4, 1 mov w0, 0 uxth w3, w3 -.L2867: +.L2841: add x1, x2, x0, sxtw 1 mov w5, 1 ldrh w1, [x1,40] - b .L2866 -.L2908: - cbz w5, .L2869 + b .L2840 +.L2882: + cbz w5, .L2843 add x2, x19, :lo12:.LANCHOR0 strb w0, [x2,2900] -.L2869: - cbz w4, .L2870 +.L2843: + cbz w4, .L2844 add x0, x19, :lo12:.LANCHOR0 strh w3, [x0,2898] -.L2870: +.L2844: add x0, x19, :lo12:.LANCHOR0 ldrb w2, [x0,3257] ldrh w20, [x0,3350] cmp w2, 2 mul w1, w1, w20 - bne .L2871 + bne .L2845 ldrb w2, [x0,2902] add x0, x0, 2896 - cbnz w2, .L2871 + cbnz w2, .L2845 ldrh w20, [x0,2] add w20, w1, w20, lsl 1 - b .L2872 -.L2871: + b .L2846 +.L2845: add x0, x19, :lo12:.LANCHOR0 ldrh w20, [x0,2898] add w20, w1, w20 -.L2872: +.L2846: add x2, x19, :lo12:.LANCHOR0 add x1, x2, 2896 ldrb w0, [x2,2900] @@ -17854,26 +17705,26 @@ gc_scan_src_blk_one_page: strb w0, [x2,2900] ldrb w2, [x2,3276] cmp w2, w0 - bne .L2873 + bne .L2847 ldrh w0, [x1,2] strb wzr, [x1,4] add w0, w0, 1 strh w0, [x1,2] -.L2873: +.L2847: mov w0, 1 mov w21, 0 add x19, x19, :lo12:.LANCHOR0 bl buf_alloc mov x22, x0 -.L2884: +.L2858: ldrb w0, [x19,2902] - cbnz w21, .L2886 + cbnz w21, .L2860 cmp w0, 3 - beq .L2874 -.L2886: + beq .L2848 +.L2860: cmp w0, w21 - bgt .L2876 -.L2885: + bgt .L2850 +.L2859: mov x0, x22 bl buf_free ldr x23, [sp,48] @@ -17881,56 +17732,56 @@ gc_scan_src_blk_one_page: ldp x21, x22, [sp,32] ldp x29, x30, [sp], 80 ret -.L2876: +.L2850: ldrb w1, [x19,3257] cmp w1, 2 - bne .L2877 - cbnz w0, .L2877 + bne .L2851 + cbnz w0, .L2851 add w0, w21, w20 orr w0, w0, 33554432 - b .L2907 -.L2877: + b .L2881 +.L2851: orr w0, w20, w21, lsl 24 -.L2907: +.L2881: str w0, [x22,40] mov w1, 1 mov x0, x22 bl sblk_read_page ldr w0, [x22,52] cmp w0, 512 - beq .L2881 + beq .L2855 cmn w0, #1 - beq .L2881 + beq .L2855 ldr x0, [x22,24] ldr w23, [x0,4] mov w0, w23 bl lpa_hash_get_ppa str w0, [x29,76] cmn w0, #1 - bne .L2882 + bne .L2856 mov w0, w23 add x1, x29, 76 mov w2, 0 bl pm_log2phys -.L2882: +.L2856: ldr w0, [x29,76] cmp w20, w0 - bne .L2881 + bne .L2855 ldrh w2, [x19,2920] ldr x1, [x19,3248] str w20, [x1,x2,lsl 2] ldrh w1, [x19,2920] add w1, w1, 1 strh w1, [x19,2920] -.L2881: +.L2855: ldrh w0, [x19,2922] add w0, w0, 1 strh w0, [x19,2922] -.L2874: +.L2848: add w21, w21, 1 cmp w21, 4 - bne .L2884 - b .L2885 + bne .L2858 + b .L2859 .size gc_scan_src_blk_one_page, .-gc_scan_src_blk_one_page .align 2 .global gc_scan_src_blk @@ -17947,32 +17798,32 @@ gc_scan_src_blk: ldrh w1, [x0,2896] mov w0, 65535 cmp w1, w0 - bne .L2910 + bne .L2884 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 920 - add x1, x1, 640 + mov w2, 925 + add x1, x1, 616 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2910: +.L2884: add x2, x19, :lo12:.LANCHOR0 mov w3, 65535 mov w0, 0 ldrh w1, [x2,2896] cmp w1, w3 - beq .L2911 + beq .L2885 adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L2912 + tbz x0, 8, .L2886 ubfiz x3, x1, 1, 16 ldr x2, [x2,600] - adrp x0, .LC225 - add x0, x0, :lo12:.LC225 + adrp x0, .LC224 + add x0, x0, :lo12:.LC224 ldrh w2, [x2,x3] bl printk -.L2912: +.L2886: add x20, x19, :lo12:.LANCHOR0 bl timer_get_time add x21, x20, 2896 @@ -17981,74 +17832,74 @@ gc_scan_src_blk: bl ftl_get_blk_list_in_sblk uxtb w1, w0 strb w1, [x21,5] - cbnz w1, .L2913 + cbnz w1, .L2887 mov w0, -1 strh w0, [x20,2896] - b .L2939 -.L2913: + b .L2913 +.L2887: ldrh w3, [x20,2896] ldr x2, [x20,584] add x2, x2, x3, lsl 2 ldrb w2, [x2,2] tst w2, 192 and w4, w2, 224 - beq .L2914 + beq .L2888 cmp w4, 224 - beq .L2914 + beq .L2888 ldr x2, [x20,608] ldrh w5, [x2,16] cmp w5, w3 - beq .L2914 + beq .L2888 ldrh w5, [x2,48] cmp w5, w3 - beq .L2914 + beq .L2888 ldrh w2, [x2,80] cmp w2, w3 - bne .L2915 -.L2914: - cbnz w4, .L2916 + bne .L2889 +.L2888: + cbnz w4, .L2890 add x0, x19, :lo12:.LANCHOR0 ldr x0, [x0,600] ldrh w0, [x0,x3,lsl 1] - cbz w0, .L2917 + cbz w0, .L2891 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 940 - add x1, x1, 640 + mov w2, 945 + add x1, x1, 616 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2917: +.L2891: add x0, x19, :lo12:.LANCHOR0 ldrh w1, [x0,2896] ldr x0, [x0,600] strh wzr, [x0,x1,lsl 1] -.L2916: +.L2890: add x19, x19, :lo12:.LANCHOR0 mov w0, -1 strh wzr, [x19,2920] strh w0, [x19,2896] -.L2939: +.L2913: mov w0, 0 - b .L2911 -.L2915: + b .L2885 +.L2889: and w0, w0, 255 sub w0, w0, #1 add x0, x21, x0, sxtw 1 ldrh w20, [x0,40] mov w0, 65535 cmp w20, w0 - bne .L2918 + bne .L2892 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 948 - add x1, x1, 640 + mov w2, 953 + add x1, x1, 616 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2918: +.L2892: add x2, x19, :lo12:.LANCHOR0 mov w24, 1 ldrh w3, [x2,2896] @@ -18062,16 +17913,16 @@ gc_scan_src_blk: mul w1, w20, w1 and w3, w3, 224 cmp w3, 160 - bne .L2919 + bne .L2893 ldrb w3, [x2,3257] cmp w3, 2 uxth w24, w3 orr w1, w1, w3, lsl 24 - bne .L2919 + bne .L2893 ldrh w0, [x2,3274] sub w0, w0, #1 uxth w0, w0 -.L2919: +.L2893: add x20, x19, :lo12:.LANCHOR0 orr w23, w0, w1 mov w0, 1 @@ -18094,29 +17945,29 @@ gc_scan_src_blk: strh wzr, [x20,2920] ldr w0, [x21,52] cmp w0, 512 - beq .L2940 + beq .L2914 cmn w0, #1 - beq .L2940 + beq .L2914 ldr x0, [x21,24] ldr w1, [x0] mov w0, 15555 movk w0, 0xf55f, lsl 16 cmp w1, w0 - beq .L2922 + beq .L2896 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 980 - add x1, x1, 640 + mov w2, 985 + add x1, x1, 616 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2940: +.L2914: mov x0, x21 bl buf_free mov w0, -1 - b .L2911 -.L2922: + b .L2885 +.L2896: ldrb w0, [x20,3276] mov x26, 0 ldrh w22, [x20,3300] @@ -18126,21 +17977,21 @@ gc_scan_src_blk: mul w22, w24, w22 mov w24, 21 uxth w22, w22 -.L2923: +.L2897: cmp w22, w26 - ble .L2941 + ble .L2915 ldr w0, [x23,x26,lsl 2] cmn w0, #1 - beq .L2925 + beq .L2899 bl lpa_hash_get_ppa str w0, [x29,92] cmn w0, #1 - bne .L2926 + bne .L2900 ldr w0, [x23,x26,lsl 2] add x1, x29, 92 mov w2, 0 bl pm_log2phys -.L2926: +.L2900: ldrh w1, [x20,3340] ldr w2, [x29,92] sub w0, w24, w1 @@ -18152,18 +18003,18 @@ gc_scan_src_blk: ldrb w0, [x20,3338] udiv w1, w1, w0 cmp w1, w3 - bne .L2925 + bne .L2899 ldrh w3, [x20,2920] ldr x1, [x20,3248] str w2, [x1,x3,lsl 2] ldrh w1, [x20,2920] add w1, w1, 1 strh w1, [x20,2920] -.L2925: +.L2899: bl timer_get_time add x26, x26, 1 - b .L2923 -.L2941: + b .L2897 +.L2915: mov x0, x21 bl buf_free add x0, x19, :lo12:.LANCHOR0 @@ -18173,11 +18024,11 @@ gc_scan_src_blk: ldrh w2, [x3,x2] ldrh w3, [x0,2920] cmp w2, w3 - beq .L2929 - adrp x0, .LC226 - add x0, x0, :lo12:.LC226 + beq .L2903 + adrp x0, .LC225 + add x0, x0, :lo12:.LC225 bl printk -.L2929: +.L2903: add x19, x19, :lo12:.LANCHOR0 ldrh w2, [x19,2896] ldr x1, [x19,600] @@ -18185,7 +18036,7 @@ gc_scan_src_blk: strh w3, [x1,x2,lsl 1] strh wzr, [x19,2924] ldrh w0, [x19,2920] -.L2911: +.L2885: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -18207,14 +18058,14 @@ gc_scan_static_data: ldr x0, [x3,608] ldr w1, [x0,544] cmn w1, #1 - beq .L2943 + beq .L2917 adrp x21, .LANCHOR3 adrp x22, .LC0 add x21, x21, :lo12:.LANCHOR3 mov w20, 11 add x22, x22, :lo12:.LC0 - add x21, x21, 656 -.L2944: + add x21, x21, 632 +.L2918: add x24, x19, :lo12:.LANCHOR0 add x1, x29, 76 mov w2, 0 @@ -18223,7 +18074,7 @@ gc_scan_static_data: bl pm_log2phys ldr w0, [x29,76] cmn w0, #1 - beq .L2945 + beq .L2919 mov w0, 1 bl buf_alloc mov x23, x0 @@ -18233,7 +18084,7 @@ gc_scan_static_data: bl sblk_read_page ldr w0, [x23,52] cmp w0, 256 - bne .L2946 + bne .L2920 ldrh w0, [x24,3340] mov w2, 21 mov w1, 1 @@ -18247,23 +18098,23 @@ gc_scan_static_data: udiv w0, w2, w0 mov w2, 0 bl gc_add_sblk -.L2946: +.L2920: add x0, x19, :lo12:.LANCHOR0 ldr x1, [x23,24] ldr x0, [x0,608] ldr w1, [x1,4] ldr w0, [x0,544] cmp w1, w0 - beq .L2947 + beq .L2921 mov x1, x21 - mov w2, 1419 + mov w2, 1424 mov x0, x22 bl printk bl dump_stack -.L2947: +.L2921: mov x0, x23 bl buf_free -.L2945: +.L2919: add x2, x19, :lo12:.LANCHOR0 ldr x1, [x2,608] ldr w2, [x2,2840] @@ -18271,7 +18122,7 @@ gc_scan_static_data: add w0, w0, 1 str w0, [x1,544] cmp w0, w2 - bcc .L2948 + bcc .L2922 mov w0, -1 str w0, [x1,544] ldr w0, [x1,548] @@ -18282,37 +18133,37 @@ gc_scan_static_data: bl ftl_ext_info_flush mov w0, 0 bl ftl_info_flush - b .L2942 -.L2948: + b .L2916 +.L2922: ldr w0, [x29,76] cmn w0, #1 - bne .L2942 + bne .L2916 sub w20, w20, #1 uxth w20, w20 - cbnz w20, .L2944 - b .L2942 -.L2943: + cbnz w20, .L2918 + b .L2916 +.L2917: ldr w1, [x0,536] ldr w2, [x0,12] add w1, w1, 12959744 add w1, w1, 256 cmp w2, w1 - bhi .L2953 + bhi .L2927 ldr x3, [x3,2864] ldr w1, [x0,540] ldr w3, [x3,44] add w1, w1, 98304 add w1, w1, 1696 cmp w3, w1 - bls .L2942 -.L2953: + bls .L2916 +.L2927: add x19, x19, :lo12:.LANCHOR0 ldr x1, [x19,2864] ldr w1, [x1,44] str w1, [x0,540] str w2, [x0,536] str wzr, [x0,544] -.L2942: +.L2916: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -18336,45 +18187,45 @@ gc_block_vpn_scan: ldrh w0, [x20,576] ldr w1, [x1,608] cmp w1, w0 - bcs .L2958 + bcs .L2932 bl timer_get_time ldr x21, [x20,608] ldr w1, [x21,604] add w1, w1, 28672 add w1, w1, 1328 cmp w0, w1 - bls .L2958 + bls .L2932 bl timer_get_time str w0, [x21,604] ldr x0, [x20,608] ldrh w2, [x20,576] ldr w1, [x0,600] cmp w1, w2 - bcs .L2962 + bcs .L2936 ldr x2, [x20,2864] ldrh w2, [x2,134] cmp w1, w2 - bcs .L2963 -.L2962: + bcs .L2937 +.L2936: add x1, x19, :lo12:.LANCHOR0 ldr x1, [x1,2864] ldrh w1, [x1,134] str w1, [x0,600] -.L2963: +.L2937: ldr w25, [x0,600] mov w0, 65535 uxth w20, w25 cmp w20, w0 - bne .L2964 + bne .L2938 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 1712 - add x1, x1, 680 + mov w2, 1717 + add x1, x1, 656 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2964: +.L2938: add x21, x19, :lo12:.LANCHOR0 ldr x0, [x21,608] ldr w1, [x0,600] @@ -18387,47 +18238,47 @@ gc_block_vpn_scan: mov w0, w20 bl ftl_get_blk_list_in_sblk uxth w1, w0 - cbz w1, .L2958 + cbz w1, .L2932 uxtw x22, w20 ldr x24, [x21,584] add x24, x24, x22, lsl 2 ldrb w1, [x24,2] tst w1, 192 and w2, w1, 224 - beq .L2965 + beq .L2939 cmp w2, 224 - beq .L2965 + beq .L2939 ldr x1, [x21,608] ldrh w3, [x1,16] cmp w3, w20 - beq .L2965 + beq .L2939 ldrh w3, [x1,48] cmp w3, w20 - beq .L2965 + beq .L2939 ldrh w1, [x1,80] cmp w1, w20 - bne .L2966 -.L2965: - cbnz w2, .L2958 + bne .L2940 +.L2939: + cbnz w2, .L2932 add x0, x19, :lo12:.LANCHOR0 lsl x22, x22, 1 ldr x0, [x0,600] ldrh w0, [x0,x22] - cbz w0, .L2967 + cbz w0, .L2941 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 1728 - add x1, x1, 680 + mov w2, 1733 + add x1, x1, 656 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2967: +.L2941: add x19, x19, :lo12:.LANCHOR0 ldr x0, [x19,600] strh wzr, [x0,x22] - b .L2958 -.L2966: + b .L2932 +.L2940: and w0, w0, 65535 add x1, x29, 144 sub w0, w0, #1 @@ -18435,16 +18286,16 @@ gc_block_vpn_scan: ldrh w21, [x0,-16] mov w0, 65535 cmp w21, w0 - bne .L2969 + bne .L2943 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 1734 - add x1, x1, 680 + mov w2, 1739 + add x1, x1, 656 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L2969: +.L2943: add x2, x19, :lo12:.LANCHOR0 ldrb w3, [x24,2] mov w26, 1 @@ -18455,16 +18306,16 @@ gc_block_vpn_scan: sub w0, w0, #1 mul w1, w21, w1 uxth w0, w0 - bne .L2970 + bne .L2944 ldrb w3, [x2,3257] cmp w3, 2 uxth w26, w3 orr w1, w1, w3, lsl 24 - bne .L2970 + bne .L2944 ldrh w0, [x2,3274] sub w0, w0, #1 uxth w0, w0 -.L2970: +.L2944: orr w21, w0, w1 mov w0, 1 bl buf_alloc @@ -18482,30 +18333,30 @@ gc_block_vpn_scan: bl ftl_memset ldr w0, [x23,52] cmp w0, 512 - beq .L2982 + beq .L2956 cmn w0, #1 cset w2, eq - cbz w2, .L2971 -.L2982: + cbz w2, .L2945 +.L2956: mov w0, w20 mov w1, 1 mov w2, 0 - b .L2995 -.L2971: + b .L2969 +.L2945: ldr x0, [x23,24] ldr w1, [x0] mov w0, 15555 movk w0, 0xf55f, lsl 16 cmp w1, w0 - beq .L2973 + beq .L2947 mov w0, w20 mov w1, 1 -.L2995: +.L2969: bl gc_add_sblk mov x0, x23 bl buf_free - b .L2958 -.L2973: + b .L2932 +.L2947: ldrb w0, [x21,3276] mov x27, 0 ldrh w1, [x21,3300] @@ -18516,22 +18367,22 @@ gc_block_vpn_scan: uxth w0, w26 ldr x26, [x23,8] str w0, [x29,108] -.L2974: +.L2948: ldr w0, [x29,108] cmp w0, w27 - ble .L2996 + ble .L2970 ldr w0, [x26,x27,lsl 2] cmn w0, #1 - beq .L2975 + beq .L2949 bl lpa_hash_get_ppa str w0, [x29,124] cmn w0, #1 - bne .L2976 + bne .L2950 ldr w0, [x26,x27,lsl 2] add x1, x29, 124 mov w2, 0 bl pm_log2phys -.L2976: +.L2950: add x4, x19, :lo12:.LANCHOR0 mov w1, 21 ldrh w0, [x4,3340] @@ -18545,39 +18396,39 @@ gc_block_vpn_scan: and w0, w2, w0 udiv w0, w0, w1 cmp w0, w28 - bne .L2975 + bne .L2949 add w21, w21, 1 uxth w21, w21 -.L2975: +.L2949: add x27, x27, 1 - b .L2974 -.L2996: + b .L2948 +.L2970: mov x0, x23 bl buf_free adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L2978 + tbz x0, 8, .L2952 add x0, x19, :lo12:.LANCHOR0 ldrb w4, [x24,2] uxth w1, w25 mov w3, w21 ubfx x4, x4, 5, 3 ldr x2, [x0,600] - adrp x0, .LC227 - add x0, x0, :lo12:.LC227 + adrp x0, .LC226 + add x0, x0, :lo12:.LC226 ldrh w2, [x2,x22,lsl 1] bl printk -.L2978: +.L2952: add x19, x19, :lo12:.LANCHOR0 cmp w21, 31 ldr x0, [x19,600] strh w21, [x0,x22,lsl 1] - bhi .L2958 + bhi .L2932 mov w0, w20 mov w1, 1 mov w2, 0 bl gc_add_sblk -.L2958: +.L2932: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -18609,9 +18460,9 @@ ftl_sblk_dump: add x1, x0, x25 ldrh w4, [x0,x25] ldr w5, [x0,x25] - adrp x0, .LC228 + adrp x0, .LC227 ldrb w3, [x1,2] - add x0, x0, :lo12:.LC228 + add x0, x0, :lo12:.LC227 mov w1, w20 and w4, w4, 2047 ubfx x2, x3, 5, 3 @@ -18621,19 +18472,19 @@ ftl_sblk_dump: mov w1, 65535 mov w0, 0 cmp w20, w1 - beq .L2998 + beq .L2972 ldrh w1, [x19,576] cmp w1, w20 - bls .L2998 + bls .L2972 ldr x0, [x19,584] mov w26, 1 add x0, x0, x25 ldrb w0, [x0,2] and w0, w0, 224 cmp w0, 160 - bne .L2999 + bne .L2973 ldrb w26, [x19,3257] -.L2999: +.L2973: add x1, x29, 192 mov w0, w20 strh w20, [x29,176] @@ -18654,8 +18505,8 @@ ftl_sblk_dump: mul w1, w1, w2 strh w1, [x29,182] ldr x1, [x0,584] - adrp x0, .LC229 - add x0, x0, :lo12:.LC229 + adrp x0, .LC228 + add x0, x0, :lo12:.LC228 add x1, x1, x25 ldrb w2, [x1,2] mov w1, w20 @@ -18664,56 +18515,56 @@ ftl_sblk_dump: mov w0, 1 bl buf_alloc mov x28, x0 - adrp x0, .LC183 + adrp x0, .LC182 str w22, [x29,152] - add x0, x0, :lo12:.LC183 + add x0, x0, :lo12:.LC182 str x0, [x29,120] adrp x0, .LANCHOR3 add x0, x0, :lo12:.LANCHOR3 - add x0, x0, 704 + add x0, x0, 680 str x0, [x29,112] -.L3000: +.L2974: add x21, x23, :lo12:.LANCHOR0 ldrh w0, [x21,3300] cmp w0, w19 - bls .L3016 + bls .L2990 lsl w0, w19, 1 str wzr, [x29,156] sub w0, w0, #1 str w0, [x29,132] -.L3017: +.L2991: ldrb w0, [x29,185] ldr w1, [x29,156] cmp w0, w1 - bls .L3014 + bls .L2988 mov w24, 1 -.L3015: +.L2989: cmp w24, w26 ldr w0, [x29,156] - bhi .L3034 + bhi .L3008 add x1, x29, 176 add x0, x1, x0, sxtw 1 ldrh w2, [x0,16] mov w0, 65535 cmp w2, w0 - beq .L3001 + beq .L2975 add x1, x23, :lo12:.LANCHOR0 cmp w26, 3 ldrh w0, [x1,3350] mul w0, w2, w0 add w21, w0, w19 - bne .L3002 + bne .L2976 orr w21, w21, w24, lsl 24 - b .L3003 -.L3002: + b .L2977 +.L2976: cmp w26, 2 - bne .L3003 + bne .L2977 ldr w3, [x29,132] ldrb w21, [x1,3257] add w0, w0, w3 add w0, w0, w24 orr w21, w0, w21, lsl 24 -.L3003: +.L2977: mov w1, 1 str w21, [x28,40] mov x0, x28 @@ -18745,23 +18596,23 @@ ftl_sblk_dump: bl printk ldr x9, [x29,104] cmp w9, 512 - beq .L3021 + beq .L2995 cmn w9, #1 - bne .L3005 -.L3021: + bne .L2979 +.L2995: mov w0, 1 str w0, [x29,152] -.L3005: +.L2979: add x0, x23, :lo12:.LANCHOR0 ldr x0, [x0,584] add x0, x0, x25 ldrb w0, [x0,2] and w0, w0, 224 cmp w0, 32 - beq .L3001 + beq .L2975 cmp w0, 224 cset w2, eq - cbnz w2, .L3001 + cbnz w2, .L2975 ldr x0, [x28,24] str x2, [x29,104] ldr w0, [x0,4] @@ -18769,82 +18620,82 @@ ftl_sblk_dump: str w0, [x29,172] cmn w0, #1 ldr x2, [x29,104] - bne .L3007 + bne .L2981 ldr x0, [x28,24] add x1, x29, 172 ldr w0, [x0,4] bl pm_log2phys -.L3007: +.L2981: ldr w0, [x29,172] cmp w0, w21 - bne .L3008 + bne .L2982 ldr x2, [x28,24] add w22, w22, 1 - adrp x0, .LC230 + adrp x0, .LC229 mov w1, w21 - add x0, x0, :lo12:.LC230 + add x0, x0, :lo12:.LC229 mov w3, w22 ldr w2, [x2,4] bl printk -.L3008: +.L2982: ldr x0, [x29,144] - cbz x0, .L3010 + cbz x0, .L2984 ubfiz x21, x27, 2, 32 ldr w2, [x0,x21] ldr x0, [x28,24] ldr w0, [x0,4] cmp w0, w2 - beq .L3011 + beq .L2985 adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 12, .L3011 - adrp x0, .LC231 + tbz x0, 12, .L2985 + adrp x0, .LC230 mov w1, w27 - add x0, x0, :lo12:.LC231 + add x0, x0, :lo12:.LC230 bl printk -.L3011: +.L2985: ldr x0, [x29,144] ldr x1, [x28,24] ldr w0, [x0,x21] ldr w1, [x1,4] cmp w1, w0 - beq .L3010 + beq .L2984 cmn w0, #1 - beq .L3010 + beq .L2984 adrp x0, .LC0 ldr x1, [x29,112] mov w2, 1300 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3010: +.L2984: add w27, w27, 1 -.L3001: +.L2975: add w24, w24, 1 uxth w24, w24 - b .L3015 -.L3034: + b .L2989 +.L3008: add w0, w0, 1 uxth w0, w0 str w0, [x29,156] - b .L3017 -.L3014: + b .L2991 +.L2988: add w19, w19, 1 uxth w19, w19 - b .L3000 -.L3016: + b .L2974 +.L2990: mov x0, x28 bl buf_free ldr x3, [x29,136] - adrp x0, .LC232 + adrp x0, .LC231 ldr x2, [x21,600] - add x0, x0, :lo12:.LC232 + add x0, x0, :lo12:.LC231 mov w1, w20 ldrh w2, [x2,x3,lsl 1] mov w3, w22 bl printk ldr w0, [x29,152] -.L2998: +.L2972: sub sp, x29, #48 ldp x19, x20, [sp,64] ldp x21, x22, [sp,80] @@ -18872,30 +18723,30 @@ zftl_read: stp x27, x28, [sp,80] mov w25, w2 mov x23, x3 - tbz x0, 12, .L3036 - adrp x0, .LC233 + tbz x0, 12, .L3010 + adrp x0, .LC232 mov w1, w19 - add x0, x0, :lo12:.LC233 + add x0, x0, :lo12:.LC232 mov w2, w22 mov w3, w25 bl printk -.L3036: - cbnz w19, .L3037 +.L3010: + cbnz w19, .L3011 adrp x0, .LANCHOR0+520 mov w19, 24576 ldr w2, [x0,#:lo12:.LANCHOR0+520] - b .L3038 -.L3037: + b .L3012 +.L3011: cmp w19, 3 mov w0, -1 - bhi .L3039 + bhi .L3013 lsl w19, w19, 13 mov w2, 8192 -.L3038: +.L3012: add w1, w22, w25 mov w0, -1 cmp w1, w2 - bhi .L3039 + bhi .L3013 add w22, w19, w22 adrp x19, .LANCHOR0 add x1, x19, :lo12:.LANCHOR0 @@ -18918,10 +18769,10 @@ zftl_read: str x0, [x29,128] adrp x0, .LANCHOR3 add x0, x0, :lo12:.LANCHOR3 - add x0, x0, 720 + add x0, x0, 696 str x0, [x29,120] -.L3040: - cbz w24, .L3100 +.L3014: + cbz w24, .L3074 add x0, x19, :lo12:.LANCHOR0 ldr w1, [x29,136] cmp w20, w27 @@ -18930,12 +18781,12 @@ zftl_read: ldrb w0, [x0,2832] cset w26, eq uxth w21, w0 - cbnz w26, .L3070 - cbz w2, .L3041 - b .L3099 -.L3070: - cbz w2, .L3043 -.L3099: + cbnz w26, .L3044 + cbz w2, .L3015 + b .L3073 +.L3044: + cbz w2, .L3017 +.L3073: udiv w26, w22, w0 msub w26, w26, w0, w22 uxth w0, w25 @@ -18944,21 +18795,21 @@ zftl_read: uxth w21, w21 cmp w21, w25 csel w21, w0, w21, hi - b .L3041 -.L3043: + b .L3015 +.L3017: msub w21, w0, w20, w28 mov w26, w2 uxtb w21, w21 -.L3041: +.L3015: add x1, x19, :lo12:.LANCHOR0 mov w0, 0 add x1, x1, 784 -.L3046: +.L3020: ldr w2, [x1,36] cmp w2, w20 - bne .L3044 + bne .L3018 ldrb w2, [x1,2] - tbz x2, 3, .L3044 + tbz x2, 3, .L3018 add x2, x19, :lo12:.LANCHOR0 ubfiz x1, x0, 6, 32 add x0, x2, x1 @@ -18970,48 +18821,48 @@ zftl_read: add x23, x23, x21 add x1, x1, x26 bl ftl_memcpy - b .L3045 -.L3044: + b .L3019 +.L3018: add w0, w0, 1 add x1, x1, 64 cmp w0, 32 - bne .L3046 + bne .L3020 mov w0, w20 bl lpa_hash_get_ppa str w0, [x29,156] cmn w0, #1 - bne .L3047 + bne .L3021 mov w0, w20 add x1, x29, 156 mov w2, 0 bl pm_log2phys -.L3047: +.L3021: ldr w0, [x29,156] cmn w0, #1 - bne .L3048 + bne .L3022 mov w21, 0 -.L3049: +.L3023: add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,2832] cmp w21, w0 - bcs .L3045 + bcs .L3019 madd w0, w20, w0, w21 cmp w0, w22 - bcc .L3050 + bcc .L3024 cmp w0, w28 - bcs .L3050 + bcs .L3024 mov x0, x23 mov w1, 0 mov w2, 512 add x23, x23, 512 bl ftl_memset -.L3050: +.L3024: add w21, w21, 1 - b .L3049 -.L3048: + b .L3023 +.L3022: mov w0, 0 bl buf_alloc - cbz x0, .L3052 + cbz x0, .L3026 add x2, x19, :lo12:.LANCHOR0 ldr x3, [x2,2864] ldr w2, [x3,40] @@ -19027,36 +18878,36 @@ zftl_read: str w20, [x0,36] strb w26, [x0,57] bl zftl_add_read_buf -.L3045: +.L3019: add w20, w20, 1 sub w24, w24, #1 -.L3052: - cbz w24, .L3071 +.L3026: + cbz w24, .L3045 add x0, x19, :lo12:.LANCHOR0 ldrb w0, [x0,2834] cmp w0, 2 - bhi .L3040 -.L3071: + bhi .L3014 +.L3045: add x2, x19, :lo12:.LANCHOR0 ldrb w1, [x2,3894] - cbz w1, .L3040 + cbz w1, .L3014 add x0, x2, 784 ldrb w2, [x2,3893] add x0, x0, x2, lsl 6 bl sblk_read_page -.L3055: +.L3029: add x0, x19, :lo12:.LANCHOR0 ldrb w1, [x0,3894] - cbz w1, .L3101 + cbz w1, .L3075 ldrb w0, [x0,3893] cmp w0, 255 - bne .L3056 + bne .L3030 ldr x1, [x29,120] mov w2, 1064 ldr x0, [x29,128] bl printk bl dump_stack -.L3056: +.L3030: add x2, x19, :lo12:.LANCHOR0 add x1, x2, 784 ldrb w21, [x2,3893] @@ -19066,16 +18917,16 @@ zftl_read: ldr w8, [x26,52] strb w0, [x2,3893] cmn w8, #1 - bne .L3057 + bne .L3031 ldr x1, [x2,608] str w8, [x29,140] ldr w0, [x1,552] add w0, w0, 1 str w0, [x1,552] - b .L3058 -.L3057: + b .L3032 +.L3031: cmp w8, 256 - bne .L3058 + bne .L3032 ldrh w0, [x2,3340] mov w1, 21 mov w5, 1 @@ -19090,8 +18941,8 @@ zftl_read: ldrb w4, [x2,3338] ldr w2, [x26,36] udiv w4, w0, w4 - adrp x0, .LC234 - add x0, x0, :lo12:.LC234 + adrp x0, .LC233 + add x0, x0, :lo12:.LC233 str x4, [x29,112] uxth w1, w4 bl printk @@ -19102,7 +18953,7 @@ zftl_read: mov w1, w5 bl gc_add_sblk ldr x8, [x29,96] -.L3058: +.L3032: add x9, x19, :lo12:.LANCHOR0 add x1, x9, 784 add x1, x1, x21, lsl 6 @@ -19111,7 +18962,7 @@ zftl_read: ldr w3, [x0,4] ldr w0, [x1,36] cmp w3, w0 - beq .L3059 + beq .L3033 ldr x3, [x9,608] str x8, [x29,96] str x9, [x29,104] @@ -19119,9 +18970,9 @@ zftl_read: str x10, [x29,112] add w0, w0, 1 str w0, [x3,552] - adrp x0, .LC235 + adrp x0, .LC234 ldr x7, [x1,24] - add x0, x0, :lo12:.LC235 + add x0, x0, :lo12:.LC234 ldr w2, [x10,4] ldr w3, [x10,8] ldr w4, [x7] @@ -19146,7 +18997,7 @@ zftl_read: mov x1, 0 bl ftl_sblk_dump ldr x8, [x29,96] -.L3059: +.L3033: add x0, x19, :lo12:.LANCHOR0 add x0, x0, 784 add x0, x0, x21, lsl 6 @@ -19154,35 +19005,35 @@ zftl_read: ldr w0, [x0,36] ldr w1, [x1,4] cmp w1, w0 - bne .L3072 + bne .L3046 cmn w8, #1 - bne .L3060 -.L3072: + bne .L3034 +.L3046: ldr x1, [x29,120] mov w2, 1085 ldr x0, [x29,128] bl printk bl dump_stack -.L3060: +.L3034: add x1, x19, :lo12:.LANCHOR0 add x0, x1, 784 add x21, x0, x21, lsl 6 ldrb w1, [x1,2832] ldrb w2, [x21,56] cmp w1, w2 - bls .L3062 + bls .L3036 ldrb w3, [x21,57] lsl w2, w2, 9 ldr x1, [x21,8] ldr x0, [x21,16] add x1, x1, x3, lsl 9 bl ftl_memcpy - b .L3063 -.L3062: + b .L3037 +.L3036: ldrb w0, [x21,2] and w0, w0, -9 strb w0, [x21,2] -.L3063: +.L3037: add x21, x19, :lo12:.LANCHOR0 mov x1, x26 add x0, x21, 3895 @@ -19192,18 +19043,18 @@ zftl_read: ldrb w0, [x21,3894] sub w0, w0, #1 strb w0, [x21,3894] - b .L3055 -.L3101: + b .L3029 +.L3075: mov w2, -1 strb w1, [x0,3894] strb w2, [x0,3893] - b .L3040 -.L3100: + b .L3014 +.L3074: bl timer_get_time adrp x1, .LANCHOR7-80 str w0, [x1,#:lo12:.LANCHOR7-80] ldr w0, [x29,140] -.L3039: +.L3013: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -19258,34 +19109,34 @@ zftl_debug_proc_write: stp x23, x24, [sp,80] stp x25, x26, [sp,96] mov x21, x2 - bhi .L3105 + bhi .L3079 mov x0, x19 bl rk_copy_from_user mov x22, x0 mov x0, -14 - cbnz x22, .L3105 - adrp x0, .LC236 + cbnz x22, .L3079 + adrp x0, .LC235 mov x1, x19 - add x0, x0, :lo12:.LC236 + add x0, x0, :lo12:.LC235 strb w22, [x19,x21] bl printk - adrp x0, .LC237 + adrp x0, .LC236 mov x1, x19 - add x0, x0, :lo12:.LC237 + add x0, x0, :lo12:.LC236 mov w2, 1 mov w3, 16 bl rknand_print_hex bl rknand_device_lock - adrp x1, .LC238 + adrp x1, .LC237 mov x0, x19 - add x1, x1, :lo12:.LC238 + add x1, x1, :lo12:.LC237 mov x2, 7 bl memcmp - cbnz w0, .L3106 + cbnz w0, .L3080 adrp x23, .LANCHOR0 - adrp x0, .LC239 + adrp x0, .LC238 add x19, x23, :lo12:.LANCHOR0 - add x0, x0, :lo12:.LC239 + add x0, x0, :lo12:.LC238 mov w2, 4 adrp x20, .LANCHOR4 ldr x3, [x19,2864] @@ -19294,19 +19145,19 @@ zftl_debug_proc_write: bl rknand_print_hex add x3, x20, :lo12:.LANCHOR4 ldr x1, [x19,2864] - adrp x0, .LC240 + adrp x0, .LC239 mov w2, 2 - add x0, x0, :lo12:.LC240 + add x0, x0, :lo12:.LC239 add x1, x1, 416 ldrh w3, [x3,1164] mov w19, w22 mov w22, 65535 bl rknand_print_hex -.L3107: +.L3081: add x0, x20, :lo12:.LANCHOR4 ldrh w0, [x0,1164] cmp w19, w0 - bge .L3110 + bge .L3084 mov w0, 300 bl msleep add x0, x23, :lo12:.LANCHOR0 @@ -19314,63 +19165,63 @@ zftl_debug_proc_write: add x0, x0, x19, sxtw 1 ldrh w0, [x0,416] cmp w0, w22 - beq .L3108 + beq .L3082 mov x1, 0 bl ftl_sblk_dump -.L3108: +.L3082: add w19, w19, 1 - b .L3107 -.L3106: - adrp x1, .LC241 + b .L3081 +.L3080: + adrp x1, .LC240 mov x0, x19 - add x1, x1, :lo12:.LC241 + add x1, x1, :lo12:.LC240 mov x2, 7 bl memcmp - cbnz w0, .L3111 + cbnz w0, .L3085 adrp x23, .LANCHOR0 - adrp x0, .LC239 + adrp x0, .LC238 add x20, x23, :lo12:.LANCHOR0 - add x0, x0, :lo12:.LC239 + add x0, x0, :lo12:.LC238 mov w2, 4 add x22, x29, 192 - adrp x24, .LC244 + adrp x24, .LC243 ldr x3, [x20,2864] - add x24, x24, :lo12:.LC244 + add x24, x24, :lo12:.LC243 add x1, x3, 704 ldrh w3, [x3,698] bl rknand_print_hex adrp x3, .LANCHOR4+1164 ldr x1, [x20,2864] - adrp x0, .LC240 + adrp x0, .LC239 mov w2, 2 - add x0, x0, :lo12:.LC240 + add x0, x0, :lo12:.LC239 add x1, x1, 416 ldrh w3, [x3,#:lo12:.LANCHOR4+1164] bl rknand_print_hex - adrp x0, .LC242 + adrp x0, .LC241 add x1, x19, 7 - add x0, x0, :lo12:.LC242 + add x0, x0, :lo12:.LC241 str x1, [x22,-88]! add x19, x20, 3904 mov x20, x23 bl printk - adrp x23, .LC243 + adrp x23, .LC242 ldr x0, [x29,104] mov x1, x22 add x25, x19, 512 - add x23, x23, :lo12:.LC243 + add x23, x23, :lo12:.LC242 bl rk_simple_strtoull.constprop.31 mov w22, w0 str w0, [x29,100] uxth w26, w0 -.L3113: +.L3087: ldrh w1, [x19] mov x0, x23 ldrh w2, [x19,2] bl printk ldrh w0, [x19] cmp w0, w26 - bne .L3112 + bne .L3086 add x0, x20, :lo12:.LANCHOR0 ldr x1, [x19,8] mov w2, 4 @@ -19378,10 +19229,10 @@ zftl_debug_proc_write: mov x0, x24 lsl w3, w3, 7 bl rknand_print_hex -.L3112: +.L3086: add x19, x19, 16 cmp x19, x25 - bne .L3113 + bne .L3087 mov w0, 300 add x20, x20, :lo12:.LANCHOR0 bl msleep @@ -19404,8 +19255,8 @@ zftl_debug_proc_write: str w0, [sp,8] ldr w0, [x7,12] str w0, [sp,16] - adrp x0, .LC206 - add x0, x0, :lo12:.LC206 + adrp x0, .LC205 + add x0, x0, :lo12:.LC205 ldr w3, [x6] ldr w2, [x19,52] ldr w4, [x6,4] @@ -19414,28 +19265,28 @@ zftl_debug_proc_write: ldr w6, [x6,12] bl printk ldrb w3, [x20,2832] - adrp x0, .LC245 - add x0, x0, :lo12:.LC245 + adrp x0, .LC244 + add x0, x0, :lo12:.LC244 ldr x1, [x19,8] mov w2, 4 lsl w3, w3, 7 - b .L3128 -.L3111: - adrp x1, .LC246 + b .L3102 +.L3085: + adrp x1, .LC245 mov x0, x19 - add x1, x1, :lo12:.LC246 + add x1, x1, :lo12:.LC245 mov x2, 7 bl memcmp - cbnz w0, .L3114 + cbnz w0, .L3088 bl dump_ftl_info - b .L3110 -.L3114: - adrp x1, .LC247 + b .L3084 +.L3088: + adrp x1, .LC246 mov x0, x19 - add x1, x1, :lo12:.LC247 + add x1, x1, :lo12:.LC246 mov x2, 9 bl memcmp - cbnz w0, .L3115 + cbnz w0, .L3089 add x1, x29, 192 add x0, x19, 9 str x0, [x1,-88]! @@ -19444,24 +19295,24 @@ zftl_debug_proc_write: adrp x1, .LANCHOR0+3336 strh w0, [x1,#:lo12:.LANCHOR0+3336] bl dump_all_list_info - b .L3110 -.L3115: - adrp x1, .LC248 + b .L3084 +.L3089: + adrp x1, .LC247 mov x0, x19 - add x1, x1, :lo12:.LC248 + add x1, x1, :lo12:.LC247 mov x2, 8 bl memcmp - cbz w0, .L3110 - adrp x1, .LC249 + cbz w0, .L3084 + adrp x1, .LC248 mov x0, x19 - add x1, x1, :lo12:.LC249 + add x1, x1, :lo12:.LC248 mov x2, 8 bl memcmp - cbnz w0, .L3117 + cbnz w0, .L3091 add x20, x29, 192 - adrp x0, .LC242 + adrp x0, .LC241 add x1, x19, 8 - add x0, x0, :lo12:.LC242 + add x0, x0, :lo12:.LC241 str x1, [x20,-88]! bl printk ldr x0, [x29,104] @@ -19486,8 +19337,8 @@ zftl_debug_proc_write: str w0, [sp,8] ldr w0, [x7,12] str w0, [sp,16] - adrp x0, .LC206 - add x0, x0, :lo12:.LC206 + adrp x0, .LC205 + add x0, x0, :lo12:.LC205 ldr w3, [x6] ldr w4, [x6,4] ldr w5, [x6,8] @@ -19496,34 +19347,34 @@ zftl_debug_proc_write: ldr w7, [x7] bl printk ldrb w3, [x20,2832] - adrp x0, .LC201 + adrp x0, .LC200 ldr x1, [x19,8] - add x0, x0, :lo12:.LC201 + add x0, x0, :lo12:.LC200 mov w2, 4 lsl w3, w3, 7 bl rknand_print_hex ldrb w3, [x20,2832] - adrp x0, .LC202 + adrp x0, .LC201 ldr x1, [x19,24] - add x0, x0, :lo12:.LC202 + add x0, x0, :lo12:.LC201 mov w2, 4 lsl w3, w3, 1 -.L3128: +.L3102: bl rknand_print_hex mov x0, x19 bl buf_free - b .L3110 -.L3117: - adrp x1, .LC250 + b .L3084 +.L3091: + adrp x1, .LC249 mov x0, x19 - add x1, x1, :lo12:.LC250 + add x1, x1, :lo12:.LC249 mov x2, 8 bl memcmp - cbnz w0, .L3118 + cbnz w0, .L3092 add x20, x29, 192 - adrp x0, .LC242 + adrp x0, .LC241 add x1, x19, 8 - add x0, x0, :lo12:.LC242 + add x0, x0, :lo12:.LC241 str x1, [x20,-88]! bl printk ldr x0, [x29,104] @@ -19532,18 +19383,18 @@ zftl_debug_proc_write: str w0, [x29,100] mov x1, x22 bl ftl_sblk_dump - b .L3110 -.L3118: - adrp x1, .LC251 + b .L3084 +.L3092: + adrp x1, .LC250 mov x0, x19 - add x1, x1, :lo12:.LC251 + add x1, x1, :lo12:.LC250 mov x2, 10 bl memcmp - cbnz w0, .L3119 + cbnz w0, .L3093 add x20, x29, 192 - adrp x0, .LC242 + adrp x0, .LC241 add x1, x19, 10 - add x0, x0, :lo12:.LC242 + add x0, x0, :lo12:.LC241 str x1, [x20,-88]! bl printk ldr x0, [x29,104] @@ -19552,20 +19403,20 @@ zftl_debug_proc_write: str w0, [x29,100] adrp x1, .LANCHOR2 str w0, [x1,#:lo12:.LANCHOR2] - b .L3110 -.L3119: - adrp x1, .LC252 + b .L3084 +.L3093: + adrp x1, .LC251 mov x2, 8 mov x0, x19 - add x1, x1, :lo12:.LC252 + add x1, x1, :lo12:.LC251 bl memcmp mov w2, w0 str x2, [x29,88] - cbnz w0, .L3120 + cbnz w0, .L3094 add x1, x19, 8 - adrp x0, .LC242 + adrp x0, .LC241 add x19, x29, 192 - add x0, x0, :lo12:.LC242 + add x0, x0, :lo12:.LC241 str x1, [x19,-88]! bl printk ldr x0, [x29,104] @@ -19576,18 +19427,21 @@ zftl_debug_proc_write: str w0, [x29,100] cmn w0, #1 ldr x2, [x29,88] - bne .L3121 + bne .L3095 mov w0, w19 add x1, x29, 100 bl pm_log2phys -.L3121: - adrp x0, .LC253 +.L3095: + adrp x0, .LC252 ldr w2, [x29,100] mov w1, w19 + add x0, x0, :lo12:.LC252 + bl printk + b .L3084 +.L3094: + adrp x0, .LC253 add x0, x0, :lo12:.LC253 bl printk - b .L3110 -.L3120: adrp x0, .LC254 add x0, x0, :lo12:.LC254 bl printk @@ -19612,13 +19466,10 @@ zftl_debug_proc_write: adrp x0, .LC261 add x0, x0, :lo12:.LC261 bl printk - adrp x0, .LC262 - add x0, x0, :lo12:.LC262 - bl printk -.L3110: +.L3084: bl rknand_device_unlock mov x0, x21 -.L3105: +.L3079: sub sp, x29, #32 ldp x19, x20, [sp,48] ldp x21, x22, [sp,64] @@ -19629,6 +19480,184 @@ zftl_debug_proc_write: ret .size zftl_debug_proc_write, .-zftl_debug_proc_write .align 2 + .global gc_check_data_one_wl + .type gc_check_data_one_wl, %function +gc_check_data_one_wl: + sub sp, sp, #128 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x19, x20, [sp,32] + adrp x19, .LANCHOR0 + add x20, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,48] + stp x23, x24, [sp,64] + stp x25, x26, [sp,80] + stp x27, x28, [sp,96] + ldr x0, [x20,2904] + ldr x23, [x20,608] + add x20, x20, 2896 + cbnz x0, .L3104 + mov w0, 1 + bl buf_alloc + str x0, [x20,8] +.L3104: + add x0, x19, :lo12:.LANCHOR0 + ldr x20, [x0,2904] + cbnz x20, .L3105 + adrp x1, .LANCHOR3 + adrp x0, .LC0 + add x1, x1, :lo12:.LANCHOR3 + mov w2, 366 + add x1, x1, 712 + add x0, x0, :lo12:.LC0 + bl printk + bl dump_stack +.L3105: + mov w24, 0 + add x25, x23, 80 + add x21, x19, :lo12:.LANCHOR0 + adrp x27, .LANCHOR4 +.L3106: + ldrb w0, [x25,9] + cmp w24, w0 + bge .L3129 + mov w22, 1 + sxtw x28, w24 +.L3115: + add x0, x21, 2896 + ldrh w1, [x0,20] + cmp w22, w1 + bgt .L3130 + add x1, x28, 8 + ldrh w2, [x21,3350] + ldrh w0, [x0,16] + ldrh w1, [x25,x1,lsl 1] + mul w1, w1, w2 + ldrb w2, [x21,3257] + cmp w2, 3 + bne .L3107 + add w1, w1, w0 + orr w1, w1, w22, lsl 24 + b .L3128 +.L3107: + cmp w2, 2 + bne .L3109 + sub w0, w0, #1 + add w1, w0, w1 + add w1, w1, w22 + orr w1, w1, 33554432 + b .L3128 +.L3109: + add w1, w1, w0 +.L3128: + str w1, [x20,40] + mov x0, x20 + mov w1, 1 + bl sblk_read_page + ldr w0, [x20,52] + cmn w0, #1 + beq .L3110 + add x2, x27, :lo12:.LANCHOR4 + ldrh w0, [x21,2918] + ldr x1, [x20,24] + lsl x0, x0, 2 + ldr x3, [x2,1136] + ldr w4, [x3,x0] + ldr w3, [x1,4] + cmp w4, w3 + bne .L3110 + ldr x2, [x2,1144] + ldr w2, [x2,x0] + ldr w0, [x1,8] + cmp w2, w0 + beq .L3111 +.L3110: + add x26, x27, :lo12:.LANCHOR4 + ldrh w0, [x21,2918] + add x4, x21, 2896 + ldr x1, [x26,1136] + ldr w0, [x1,x0,lsl 2] + cmn w0, #1 + beq .L3111 + ldrb w5, [x25,9] + adrp x0, .LC262 + ldrh w3, [x21,3274] + add x0, x0, :lo12:.LC262 + mov w2, 4 + str x4, [x29,104] + mul w3, w5, w3 + bl rknand_print_hex + ldrb w5, [x25,9] + adrp x0, .LC263 + ldrh w3, [x21,3274] + add x0, x0, :lo12:.LC263 + ldr x1, [x26,1144] + mov w2, 4 + mul w3, w5, w3 + bl rknand_print_hex + adrp x0, .LANCHOR2 + ldr x4, [x29,104] + ldr w0, [x0,#:lo12:.LANCHOR2] + tbz x0, 10, .L3112 + ldr x7, [x20,24] + ldrh w4, [x4,22] + ldr x5, [x26,1144] + ldr w0, [x7,12] + lsl x4, x4, 2 + ldr x3, [x26,1136] + str w0, [sp] + adrp x0, .LC264 + add x0, x0, :lo12:.LC264 + ldr w3, [x3,x4] + ldr w6, [x7,4] + ldr w4, [x5,x4] + ldr w1, [x20,40] + ldr w5, [x7] + ldr w2, [x20,52] + ldr w7, [x7,8] + bl printk +.L3112: + add x19, x19, :lo12:.LANCHOR0 + mov x1, 0 + ldr x0, [x19,608] + ldrh w0, [x0,80] + bl ftl_sblk_dump + ldr x0, [x19,600] + ldrh w1, [x23,80] + strh wzr, [x0,x1,lsl 1] + mov w0, -1 + b .L3113 +.L3111: + ldrh w0, [x21,2918] + add w22, w22, 1 + add w0, w0, 1 + strh w0, [x21,2918] + b .L3115 +.L3130: + add w24, w24, 1 + b .L3106 +.L3129: + add x19, x19, :lo12:.LANCHOR0 + ldrh w1, [x19,2912] + ldrb w3, [x19,3348] + add w0, w1, 1 + strh w0, [x19,2912] + mov w0, 0 + cbz w3, .L3113 + add w1, w1, 2 + strh w1, [x19,2912] +.L3113: + sub sp, x29, #16 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x25, x26, [sp,80] + ldp x27, x28, [sp,96] + ldp x29, x30, [sp,16] + add sp, sp, 128 + ret + .size gc_check_data_one_wl, .-gc_check_data_one_wl + .align 2 .global ftl_update_l2p_map .type ftl_update_l2p_map, %function ftl_update_l2p_map: @@ -19651,7 +19680,7 @@ ftl_update_l2p_map: add x0, x20, x24, sxtw 2 ldr w0, [x0,-4] cmn w0, #1 - beq .L3130 + beq .L3132 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 @@ -19660,24 +19689,24 @@ ftl_update_l2p_map: add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3130: - adrp x0, .LC264 +.L3132: + adrp x0, .LC266 mov x28, 0 - add x0, x0, :lo12:.LC264 - adrp x27, .LC263 + add x0, x0, :lo12:.LC266 + adrp x27, .LC265 str x0, [x29,120] - adrp x0, .LC265 - add x0, x0, :lo12:.LC265 + adrp x0, .LC267 + add x0, x0, :lo12:.LC267 mov w22, w28 str x0, [x29,112] - add x27, x27, :lo12:.LC263 -.L3131: + add x27, x27, :lo12:.LC265 +.L3133: cmp w28, w24 mov w25, w28 - bge .L3158 + bge .L3160 ldr w2, [x20,x28,lsl 2] cmn w2, #1 - beq .L3132 + beq .L3134 add x0, x19, :lo12:.LANCHOR0 ldrb w21, [x0,2832] adrp x0, .LANCHOR2 @@ -19685,22 +19714,22 @@ ftl_update_l2p_map: ldr w0, [x0,#:lo12:.LANCHOR2] udiv w21, w2, w21 and w21, w21, 65535 - tbz x0, 12, .L3136 + tbz x0, 12, .L3138 mov x0, x27 mov w1, w21 mov w3, w28 bl printk -.L3136: +.L3138: sbfiz x26, x25, 2, 32 ldr w0, [x20,x26] cmn w0, #1 - beq .L3134 + beq .L3136 add x3, x19, :lo12:.LANCHOR0 ldrb w1, [x3,2832] lsl w1, w1, 7 udiv w0, w0, w1 cmp w21, w0, uxth - bne .L3134 + bne .L3136 ldrb w0, [x23,9] ldrh w2, [x3,3350] str x3, [x29,104] @@ -19714,13 +19743,13 @@ ftl_update_l2p_map: ldr w1, [x20,x26] bl pm_ppa_update_check ldr x3, [x29,104] - cbz w0, .L3135 + cbz w0, .L3137 ldr x1, [x3,3872] mov w2, 4 ldr x0, [x29,112] mov w3, w24 bl rknand_print_hex -.L3135: +.L3137: ldr w0, [x20,x26] add x1, x29, 140 mov w2, 1 @@ -19729,27 +19758,27 @@ ftl_update_l2p_map: uxth w22, w22 mov w0, -1 str w0, [x20,x26] -.L3134: +.L3136: add w25, w25, 1 cmp w25, w24 - bne .L3136 -.L3132: + bne .L3138 +.L3134: add x28, x28, 1 - b .L3131 -.L3158: + b .L3133 +.L3160: adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 12, .L3138 + tbz x0, 12, .L3140 add x0, x19, :lo12:.LANCHOR0 ldrh w1, [x23] mov w2, w22 ubfiz x3, x1, 1, 16 ldr x4, [x0,600] - adrp x0, .LC266 - add x0, x0, :lo12:.LC266 + adrp x0, .LC268 + add x0, x0, :lo12:.LC268 ldrh w3, [x4,x3] bl printk -.L3138: +.L3140: add x19, x19, :lo12:.LANCHOR0 ldrh w1, [x23] ldr x0, [x19,600] @@ -19775,9 +19804,9 @@ ftl_alloc_new_data_sblk: ldrh w0, [x19] mov w1, 65535 cmp w0, w1 - beq .L3160 + beq .L3162 bl zftl_insert_data_list -.L3160: +.L3162: adrp x0, .LANCHOR0+608 mov w2, 2 mov w1, 3 @@ -19816,10 +19845,10 @@ ftl_write_commit: stp x21, x22, [sp,32] stp x25, x26, [sp,64] stp x27, x28, [sp,80] -.L3164: +.L3166: ldrb w0, [x24,2856] adrp x21, .LANCHOR0 - cbz w0, .L3166 + cbz w0, .L3168 ldrb w1, [x24,2888] sub w0, w0, #1 ldr x2, [x29,112] @@ -19832,7 +19861,7 @@ ftl_write_commit: strb w1, [x24,2888] ldr w1, [x27,36] cmp w1, w0 - bcc .L3167 + bcc .L3169 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 @@ -19841,7 +19870,7 @@ ftl_write_commit: add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3167: +.L3169: ldr x0, [x29,128] add x1, x21, :lo12:.LANCHOR0 add x4, x1, 784 @@ -19849,32 +19878,32 @@ ftl_write_commit: ldr w2, [x1,2840] ldr w23, [x0,36] cmp w23, w2 - bcc .L3168 + bcc .L3170 mov x0, x27 bl buf_free mov w0, -1 - b .L3222 -.L3168: + b .L3224 +.L3170: ldr x25, [x0,8] ldr x28, [x0,24] ldrb w22, [x0,57] ldrb w20, [x0,56] ldrb w0, [x1,2857] - cbz w0, .L3170 + cbz w0, .L3172 ldr x0, [x29,120] ldrb w3, [x0,1267] add x3, x4, x3, lsl 6 -.L3171: +.L3173: ldrb w5, [x3] cmp w5, 255 - beq .L3224 + beq .L3226 sbfiz x3, x5, 6, 32 add x3, x4, x3 - b .L3171 -.L3224: + b .L3173 +.L3226: ldr w0, [x3,36] cmp w0, w23 - bne .L3170 + bne .L3172 ldr x0, [x3,8] ubfiz x1, x22, 9, 8 lsl w2, w20, 9 @@ -19883,29 +19912,29 @@ ftl_write_commit: bl ftl_memcpy mov x0, x27 bl buf_free - b .L3164 -.L3170: + b .L3166 +.L3172: mov w0, w23 bl lpa_hash_get_ppa str w0, [x29,156] cmn w0, #1 - bne .L3174 + bne .L3176 mov w0, w23 add x1, x29, 156 mov w2, 0 bl pm_log2phys -.L3174: +.L3176: add x4, x21, :lo12:.LANCHOR0 mov w3, 0 add x4, x4, 784 ldr x19, [x4,-176] add x19, x19, 16 -.L3177: +.L3179: ldr w0, [x4,36] cmp w0, w23 - bne .L3175 + bne .L3177 ldrb w5, [x4,2] - tbz x5, 3, .L3175 + tbz x5, 3, .L3177 add x0, x21, :lo12:.LANCHOR0 ubfiz x3, x3, 6, 32 add x0, x0, 784 @@ -19915,22 +19944,22 @@ ftl_write_commit: strb w5, [x3,2] ldr x26, [x3,8] str w0, [x29,156] - b .L3176 -.L3175: + b .L3178 +.L3177: add w3, w3, 1 add x4, x4, 64 cmp w3, 32 - bne .L3177 + bne .L3179 mov x26, 0 -.L3176: +.L3178: add x3, x21, :lo12:.LANCHOR0 str wzr, [x29,136] ldrb w0, [x3,2832] cmp w20, w0 - bcs .L3178 + bcs .L3180 add w20, w22, w20 - cbz x26, .L3179 - cbz w22, .L3180 + cbz x26, .L3181 + cbz w22, .L3182 mov x0, x25 mov x1, x26 lsl w2, w22, 9 @@ -19939,28 +19968,28 @@ ftl_write_commit: ldr x3, [x29,136] ldr x19, [x3,608] add x19, x19, 48 -.L3180: +.L3182: add x0, x21, :lo12:.LANCHOR0 ldrb w2, [x0,2832] cmp w20, w2 - bcc .L3181 + bcc .L3183 ldr x19, [x0,608] add x19, x19, 16 - b .L3223 -.L3181: + b .L3225 +.L3183: ubfiz x1, x20, 9, 9 sub w2, w2, w20 add x0, x25, x1 lsl w2, w2, 9 add x1, x26, x1 bl ftl_memcpy -.L3223: +.L3225: str wzr, [x29,136] - b .L3178 -.L3179: + b .L3180 +.L3181: ldr w0, [x29,156] cmn w0, #1 - beq .L3182 + beq .L3184 mov w0, 1 bl buf_alloc mov x26, x0 @@ -19975,11 +20004,11 @@ ftl_write_commit: add w1, w1, 1 str w1, [x29,136] cmp w0, w23 - bne .L3183 + bne .L3185 ldr w0, [x26,52] cmn w0, #1 - bne .L3184 -.L3183: + bne .L3186 +.L3185: add x0, x21, :lo12:.LANCHOR0 ldr w2, [x29,156] mov w3, w23 @@ -19987,26 +20016,26 @@ ftl_write_commit: ldr w0, [x1,552] add w0, w0, 1 str w0, [x1,552] - adrp x0, .LC267 + adrp x0, .LC269 ldrb w1, [x26,1] - add x0, x0, :lo12:.LC267 + add x0, x0, :lo12:.LC269 ldr w4, [x26,52] bl printk - adrp x0, .LC202 + adrp x0, .LC201 mov w2, 4 ldr x1, [x26,24] - add x0, x0, :lo12:.LC202 + add x0, x0, :lo12:.LC201 mov w3, w2 bl rknand_print_hex -.L3184: +.L3186: ldr x0, [x26,24] ldr w0, [x0,4] cmp w0, w23 - bne .L3185 + bne .L3187 ldr w0, [x26,52] cmn w0, #1 - bne .L3186 -.L3185: + bne .L3188 +.L3187: adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 @@ -20015,55 +20044,55 @@ ftl_write_commit: add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3186: - cbz w22, .L3187 +.L3188: + cbz w22, .L3189 ldr w0, [x29,156] lsl w2, w22, 9 cmn w0, #1 - beq .L3188 + beq .L3190 ldr x1, [x26,8] mov x0, x25 bl ftl_memcpy - b .L3189 -.L3182: - cbz w22, .L3187 + b .L3191 +.L3184: + cbz w22, .L3189 lsl w2, w22, 9 -.L3188: +.L3190: mov x0, x25 mov w1, 0 bl ftl_memset -.L3189: +.L3191: add x0, x21, :lo12:.LANCHOR0 ldr x19, [x0,608] add x19, x19, 48 -.L3187: +.L3189: add x0, x21, :lo12:.LANCHOR0 ldrb w2, [x0,2832] cmp w20, w2 - bcc .L3190 - bls .L3191 + bcc .L3192 + bls .L3193 ldr x19, [x0,608] add x19, x19, 16 - b .L3191 -.L3190: + b .L3193 +.L3192: ldr w0, [x29,156] sub w2, w2, w20 lsl w2, w2, 9 cmn w0, #1 ubfiz x0, x20, 7, 9 - beq .L3192 + beq .L3194 ldr x1, [x26,8] lsl x20, x0, 2 add x0, x25, x20 add x1, x1, x20 bl ftl_memcpy - b .L3191 -.L3192: + b .L3193 +.L3194: add x0, x25, x0, lsl 2 mov w1, 0 bl ftl_memset -.L3191: - cbz x26, .L3178 +.L3193: + cbz x26, .L3180 ldrb w0, [x26,2] mov x1, x26 and w0, w0, -9 @@ -20073,13 +20102,13 @@ ftl_write_commit: bl buf_remove_buf mov x0, x26 bl buf_free -.L3178: +.L3180: ldrh w0, [x19,6] - cbnz w0, .L3193 + cbnz w0, .L3195 bl ftl_flush mov x0, x19 bl ftl_alloc_new_data_sblk -.L3193: +.L3195: mov x0, x19 add x20, x21, :lo12:.LANCHOR0 bl ftl_get_new_free_page @@ -20119,11 +20148,11 @@ ftl_write_commit: str w0, [x1,1268] cmp w2, 2 adrp x0, .LANCHOR4 - bhi .L3194 + bhi .L3196 ldrh w1, [x19,6] cmp w1, 1 - bne .L3166 -.L3194: + bne .L3168 +.L3196: ldrb w1, [x19,5] mov w4, 2 add x6, x21, :lo12:.LANCHOR0 @@ -20137,14 +20166,14 @@ ftl_write_commit: ldrb w5, [x1,1267] mov w1, 0 mov w3, w5 -.L3198: +.L3200: cmp w1, w4 - beq .L3225 + beq .L3227 ubfiz x3, x3, 6, 8 add w1, w1, 1 ldrb w3, [x6,x3] - b .L3198 -.L3225: + b .L3200 +.L3227: add x0, x0, :lo12:.LANCHOR4 uxtb w1, w1 sub w2, w2, w1 @@ -20157,20 +20186,20 @@ ftl_write_commit: bl sblk_prog_page ldrh w0, [x19,6] cmp w0, 1 - bne .L3166 + bne .L3168 bl sblk_wait_write_queue_completed bl ftl_write_completed mov x0, x19 bl ftl_write_last_log_page mov x0, x19 bl ftl_alloc_new_data_sblk -.L3166: +.L3168: add x21, x21, :lo12:.LANCHOR0 ldrb w19, [x21,2856] - cbnz w19, .L3164 + cbnz w19, .L3166 bl ftl_write_completed mov w0, w19 -.L3222: +.L3224: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -20195,10 +20224,10 @@ gc_do_copy_back: stp x27, x28, [sp,96] ldrb w0, [x21,3273] ldr x22, [x21,608] - cbnz w0, .L3227 + cbnz w0, .L3229 bl buf_alloc mov x20, x0 - cbz x0, .L3226 + cbz x0, .L3228 ldrh w22, [x21,2922] mov w0, w22 add w22, w22, 1 @@ -20211,60 +20240,60 @@ gc_do_copy_back: bl sblk_read_page ldr w0, [x20,52] cmp w0, 512 - beq .L3280 + beq .L3282 cmn w0, #1 - bne .L3229 -.L3280: + bne .L3231 +.L3282: adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 595 + mov w2, 600 add x1, x1, 784 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3229: +.L3231: ldr x0, [x20,24] ldr w21, [x0,4] mov w0, w21 bl lpa_hash_get_ppa str w0, [x29,144] cmn w0, #1 - bne .L3231 + bne .L3233 mov w0, w21 add x1, x29, 144 mov w2, 0 bl pm_log2phys -.L3231: +.L3233: ldr w22, [x29,144] cmp w22, w23 - bne .L3232 + bne .L3234 add x1, x19, :lo12:.LANCHOR0 add x0, x1, 784 add x1, x1, 2832 -.L3235: +.L3237: ldr w2, [x0,36] cmp w2, w21 - bne .L3233 + bne .L3235 ldrb w2, [x0,2] - tbz x2, 1, .L3233 + tbz x2, 1, .L3235 mov x0, x20 bl buf_free adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L3226 + tbz x0, 8, .L3228 add x19, x19, :lo12:.LANCHOR0 - adrp x0, .LC268 + adrp x0, .LC270 mov w1, w21 mov w2, w22 - add x0, x0, :lo12:.LC268 + add x0, x0, :lo12:.LC270 ldrh w3, [x19,2922] bl printk - b .L3226 -.L3233: + b .L3228 +.L3235: add x0, x0, 64 cmp x0, x1 - bne .L3235 + bne .L3237 add x23, x19, :lo12:.LANCHOR0 ldrb w1, [x20,2] str w21, [x20,36] @@ -20279,20 +20308,20 @@ gc_do_copy_back: str w0, [x20,32] adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L3236 + tbz x0, 8, .L3238 ldr w2, [x29,144] mov w0, w21 str x2, [x29,136] bl lpa_hash_get_ppa mov w3, w0 ldr x2, [x29,136] - adrp x0, .LC269 + adrp x0, .LC271 ldrh w5, [x23,2922] - add x0, x0, :lo12:.LC269 + add x0, x0, :lo12:.LC271 mov w1, w21 mov w4, w22 bl printk -.L3236: +.L3238: add x19, x19, :lo12:.LANCHOR0 mov x0, x20 bl ftl_gc_write_buf @@ -20304,34 +20333,34 @@ gc_do_copy_back: ldrh w0, [x19,2924] add w0, w0, 1 strh w0, [x19,2924] - b .L3226 -.L3232: + b .L3228 +.L3234: adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L3238 + tbz x0, 8, .L3240 mov w0, w21 add x19, x19, :lo12:.LANCHOR0 bl lpa_hash_get_ppa mov w3, w0 ldrh w5, [x19,2922] - adrp x0, .LC269 - add x0, x0, :lo12:.LC269 + adrp x0, .LC271 + add x0, x0, :lo12:.LC271 mov w1, w21 mov w2, w22 mov w4, w23 bl printk -.L3238: +.L3240: mov x0, x20 bl buf_free - b .L3226 -.L3227: + b .L3228 +.L3229: ldrb w24, [x21,3257] add x0, x21, 2896 add x22, x22, 80 cmp w24, 3 - bne .L3239 + bne .L3241 ldrb w1, [x21,3272] - cbz w1, .L3240 + cbz w1, .L3242 ldrb w20, [x22,9] ldrh w21, [x0,314] str w24, [x29,136] @@ -20340,8 +20369,8 @@ gc_do_copy_back: sdiv w23, w21, w23 madd w20, w23, w20, w21 uxth w20, w20 - b .L3242 -.L3240: + b .L3244 +.L3242: ldrh w20, [x0,314] adrp x0, .LANCHOR2 ldrb w21, [x22,9] @@ -20358,9 +20387,9 @@ gc_do_copy_back: cmp w25, 1 add w21, w21, w21, lsl 1 uxth w21, w21 - bne .L3243 - b .L3242 -.L3239: + bne .L3245 + b .L3244 +.L3241: ldrb w20, [x22,9] ldrb w1, [x21,3348] ldrh w21, [x0,314] @@ -20368,38 +20397,38 @@ gc_do_copy_back: sdiv w23, w21, w20 msub w20, w23, w20, w21 uxth w20, w20 - cbz w1, .L3321 + cbz w1, .L3323 mov w0, 2 -.L3321: +.L3323: str w0, [x29,136] -.L3242: +.L3244: mov w25, 0 add x24, x19, :lo12:.LANCHOR0 adrp x3, .LANCHOR4 -.L3245: +.L3247: ldrb w1, [x22,9] ldr w0, [x29,136] mul w0, w0, w1 cmp w25, w0 - bge .L3278 + bge .L3280 ldrh w0, [x24,3274] add w26, w21, w25 mul w0, w0, w1 sub w0, w0, #1 cmp w26, w0 - beq .L3278 + beq .L3280 add x0, x3, :lo12:.LANCHOR4 sbfiz x26, x26, 2, 32 ldr x1, [x0,1144] ldr w0, [x1,x26] cmn w0, #1 - bne .L3246 + bne .L3248 ldrh w27, [x24,2922] ldrh w0, [x24,2920] str x3, [x29,120] str x1, [x29,128] cmp w0, w27 - bls .L3226 + bls .L3228 mov w0, w27 add w27, w27, 1 bl gc_get_src_ppa_from_index @@ -20407,17 +20436,17 @@ gc_do_copy_back: ldr x1, [x29,128] ldr x3, [x29,120] str w0, [x1,x26] -.L3246: +.L3248: add w25, w25, 1 uxth w25, w25 - b .L3245 -.L3278: + b .L3247 +.L3280: mov w25, 1 -.L3243: +.L3245: adrp x0, .LANCHOR2 str x0, [x29,120] ldr w1, [x0,#:lo12:.LANCHOR2] - tbz x1, 8, .L3248 + tbz x1, 8, .L3250 adrp x0, .LANCHOR4+1144 add x4, x19, :lo12:.LANCHOR0 ubfiz x5, x21, 2, 16 @@ -20425,13 +20454,13 @@ gc_do_copy_back: mov w2, w25 mov w3, w20 ldr x6, [x0,#:lo12:.LANCHOR4+1144] - adrp x0, .LC270 + adrp x0, .LC272 ldrh w4, [x4,3210] - add x0, x0, :lo12:.LC270 + add x0, x0, :lo12:.LC272 ldr w5, [x6,x5] mov w6, w21 bl printk -.L3248: +.L3250: adrp x0, .LC0 mov w27, 0 add x0, x0, :lo12:.LC0 @@ -20440,12 +20469,12 @@ gc_do_copy_back: add x0, x0, :lo12:.LANCHOR3 add x0, x0, 784 str x0, [x29,104] -.L3249: +.L3251: ldrb w0, [x22,9] ldr w1, [x29,136] mul w0, w1, w0 cmp w27, w0 - bge .L3325 + bge .L3327 add w26, w21, w27 sxtw x0, w26 str x0, [x29,128] @@ -20454,11 +20483,11 @@ gc_do_copy_back: ldr x0, [x0,3264] ldrb w0, [x0,x1] cmp w0, 255 - bne .L3250 + bne .L3252 mov w0, 0 bl buf_alloc mov x24, x0 - cbnz x0, .L3251 + cbnz x0, .L3253 bl sblk_wait_write_queue_completed bl ftl_write_completed bl gc_write_completed @@ -20466,8 +20495,8 @@ gc_do_copy_back: mov w0, w24 bl buf_alloc mov x24, x0 - cbz x0, .L3226 -.L3251: + cbz x0, .L3228 +.L3253: add x28, x19, :lo12:.LANCHOR0 ldr x2, [x29,128] ldrb w1, [x24,1] @@ -20484,7 +20513,7 @@ gc_do_copy_back: sub w0, w0, #1 cmp w26, w0 adrp x26, .LANCHOR4 - bne .L3252 + bne .L3254 add x26, x26, :lo12:.LANCHOR4 mov w1, -1 ldr x0, [x26,1136] @@ -20524,8 +20553,8 @@ gc_do_copy_back: ldr x1, [x28,608] ldr x0, [x24,24] ldr w1, [x1,132] - b .L3322 -.L3252: + b .L3324 +.L3254: ldr x0, [x29,128] mov w1, 1 lsl x28, x0, 2 @@ -20537,10 +20566,10 @@ gc_do_copy_back: bl sblk_read_page ldr w0, [x24,52] cmp w0, 512 - beq .L3253 + beq .L3255 cmn w0, #1 - bne .L3254 -.L3253: + bne .L3256 +.L3255: add x4, x19, :lo12:.LANCHOR0 mov w2, 21 mov w1, 1 @@ -20557,35 +20586,35 @@ gc_do_copy_back: bl ftl_sblk_dump ldr w0, [x24,52] cmp w0, 512 - beq .L3281 + beq .L3283 cmn w0, #1 - bne .L3254 -.L3281: + bne .L3256 +.L3283: ldr x0, [x24,24] mov w1, -1 str w1, [x0,4] -.L3254: +.L3256: ldr w0, [x24,52] cmp w0, 512 - beq .L3282 + beq .L3284 cmn w0, #1 - bne .L3257 -.L3282: + bne .L3259 +.L3284: ldr x1, [x29,104] - mov w2, 710 + mov w2, 715 ldr x0, [x29,112] bl printk bl dump_stack -.L3257: +.L3259: ldr x1, [x24,24] add x0, x19, :lo12:.LANCHOR0 ldr w2, [x1,4] ldr w0, [x0,2840] cmp w2, w0 - bcc .L3259 + bcc .L3261 mov w0, -1 str w0, [x1,4] -.L3259: +.L3261: ldr x0, [x24,24] add x26, x26, :lo12:.LANCHOR4 ldr w1, [x0,4] @@ -20593,9 +20622,9 @@ gc_do_copy_back: str w1, [x0,x28] ldr x0, [x24,24] ldr w1, [x24,40] -.L3322: +.L3324: str w1, [x0,8] -.L3250: +.L3252: add x3, x19, :lo12:.LANCHOR0 ldr x2, [x29,128] add x1, x3, 784 @@ -20611,7 +20640,7 @@ gc_do_copy_back: cmp w0, 3 strb w25, [x1,61] adrp x2, .LANCHOR4 - bne .L3260 + bne .L3262 udiv w0, w27, w0 ldrh w3, [x3,3350] add x2, x2, :lo12:.LANCHOR4 @@ -20629,30 +20658,30 @@ gc_do_copy_back: add w0, w0, 1 orr w0, w3, w0, lsl 24 str w0, [x1,x4,lsl 2] - b .L3261 -.L3260: + b .L3263 +.L3262: cmp w0, 2 - bne .L3262 + bne .L3264 ldrb w6, [x3,3348] add x1, x1, 32 ldrh w0, [x3,3350] - cbnz w6, .L3263 + cbnz w6, .L3265 add w3, w27, w20 add x3, x22, x3, sxtw 1 ldrh w3, [x3,16] madd w0, w3, w0, w23 - b .L3324 -.L3263: + b .L3326 +.L3265: add w3, w20, w27, lsr 1 add x3, x22, x3, sxtw 1 ldrh w3, [x3,16] madd w0, w3, w0, w23 and w3, w27, 1 add w0, w0, w3 -.L3324: +.L3326: orr w0, w0, 33554432 str w0, [x1,8] -.L3262: +.L3264: add x0, x19, :lo12:.LANCHOR0 add x2, x2, :lo12:.LANCHOR4 add x0, x0, 784 @@ -20661,10 +20690,10 @@ gc_do_copy_back: ldrh w1, [x0,48] ldr x0, [x2,1152] str w3, [x0,x1,lsl 2] -.L3261: +.L3263: ldr x0, [x29,120] ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L3264 + tbz x0, 8, .L3266 add x0, x29, 144 ldr x1, [x29,128] mov w2, w25 @@ -20683,57 +20712,57 @@ gc_do_copy_back: ldr x0, [x5,24] ldr w0, [x0,4] str w0, [sp,8] - adrp x0, .LC271 - add x0, x0, :lo12:.LC271 + adrp x0, .LC273 + add x0, x0, :lo12:.LC273 ldr w5, [x5,40] bl printk -.L3264: +.L3266: add w8, w27, 1 uxth w27, w8 - b .L3249 -.L3325: + b .L3251 +.L3327: add x2, x19, :lo12:.LANCHOR0 mov w1, 0 ldrb w0, [x2,3257] cmp w0, 3 add x0, x29, 144 - bne .L3308 + bne .L3310 ldrb w1, [x2,3272] - cbz w1, .L3267 -.L3270: + cbz w1, .L3269 +.L3272: ldr x1, [x29,144] strb wzr, [x1,60] - b .L3268 -.L3267: + b .L3270 +.L3269: cmp w25, 1 mov w2, 9 - beq .L3323 + beq .L3325 cmp w25, 2 - bne .L3270 + bne .L3272 mov w2, 13 -.L3323: +.L3325: ldr x1, [x29,144] strb w2, [x1,60] -.L3268: +.L3270: ldrb w2, [x22,9] add x1, x0, 24 bl sblk_xlc_prog_pages - b .L3271 -.L3308: + b .L3273 +.L3310: ldrb w2, [x22,9] ldr w3, [x29,136] mul w2, w2, w3 sub w2, w2, #1 cmp w1, w2 - bge .L3326 + bge .L3328 ldr x2, [x0,w1,sxtw 3] add w1, w1, 1 ldr x3, [x0,w1,sxtw 3] uxth w1, w1 ldrb w3, [x3,1] strb w3, [x2] - b .L3308 -.L3326: + b .L3310 +.L3328: ldr x0, [x0,w2,sxtw 3] mov w1, -1 strb w1, [x0] @@ -20741,20 +20770,20 @@ gc_do_copy_back: ldr x0, [x29,144] mul w1, w3, w1 bl sblk_prog_page -.L3271: +.L3273: add x1, x19, :lo12:.LANCHOR0 ldrb w2, [x22,9] ldrb w3, [x1,3272] - cbz w3, .L3273 + cbz w3, .L3275 add w0, w2, w2, lsl 1 and w2, w0, 1023 - b .L3274 -.L3273: + b .L3276 +.L3275: ldrb w1, [x1,3348] ubfiz w0, w2, 1, 8 cmp w1, wzr csel w2, w0, w2, ne -.L3274: +.L3276: add x19, x19, :lo12:.LANCHOR0 ldr x1, [x19,2864] ldr w0, [x1,52] @@ -20768,12 +20797,12 @@ gc_do_copy_back: ldrb w2, [x22,9] mul w1, w1, w2 cmp w0, w1 - blt .L3275 + blt .L3277 ldr x0, [x19,608] strh wzr, [x0,86] -.L3275: +.L3277: bl gc_write_completed -.L3226: +.L3228: sub sp, x29, #16 ldp x19, x20, [sp,32] ldp x21, x22, [sp,48] @@ -20806,63 +20835,63 @@ zftl_do_gc: add w20, w0, w20 ldrh w22, [x1,2846] uxth w20, w20 - bne .L3328 + bne .L3330 adrp x21, .LANCHOR7 add x1, x21, :lo12:.LANCHOR7 ldr w23, [x1,-80] - cbnz w23, .L3329 + cbnz w23, .L3331 ldr w1, [x1,-76] - cbz w1, .L3328 -.L3329: + cbz w1, .L3330 +.L3331: add x1, x19, :lo12:.LANCHOR0 ldrh w2, [x1,3306] cmp w20, w2, lsr 2 - bls .L3328 + bls .L3330 ldrh w1, [x1,2872] cmp w1, w20 - bcs .L3328 + bcs .L3330 add w23, w23, 20 bl timer_get_time cmp w23, w0 - bcs .L3330 + bcs .L3332 add x0, x21, :lo12:.LANCHOR7 str wzr, [x0,-80] -.L3330: +.L3332: add x19, x21, :lo12:.LANCHOR7 ldr w20, [x19,-76] bl timer_get_time add w20, w20, 20 cmp w20, w0 - bcs .L3511 + bcs .L3515 str wzr, [x19,-76] - b .L3511 -.L3328: + b .L3515 +.L3330: adrp x23, .LANCHOR4 add x1, x23, :lo12:.LANCHOR4 ldrb w2, [x1,1130] mov w1, 16 cmp w2, 6 - bhi .L3484 - adrp x1, .L3334 - add x1, x1, :lo12:.L3334 + bhi .L3488 + adrp x1, .L3336 + add x1, x1, :lo12:.L3336 ldrh w1, [x1,w2,uxtw #1] - adr x2, .Lrtx3334 + adr x2, .Lrtx3336 add x1, x2, w1, sxth #2 br x1 -.Lrtx3334: +.Lrtx3336: .section .rodata .align 0 .align 2 -.L3334: - .2byte (.L3333 - .Lrtx3334) / 4 - .2byte (.L3335 - .Lrtx3334) / 4 - .2byte (.L3336 - .Lrtx3334) / 4 - .2byte (.L3337 - .Lrtx3334) / 4 - .2byte (.L3338 - .Lrtx3334) / 4 - .2byte (.L3442 - .Lrtx3334) / 4 - .2byte (.L3340 - .Lrtx3334) / 4 +.L3336: + .2byte (.L3335 - .Lrtx3336) / 4 + .2byte (.L3337 - .Lrtx3336) / 4 + .2byte (.L3338 - .Lrtx3336) / 4 + .2byte (.L3339 - .Lrtx3336) / 4 + .2byte (.L3340 - .Lrtx3336) / 4 + .2byte (.L3446 - .Lrtx3336) / 4 + .2byte (.L3342 - .Lrtx3336) / 4 .text -.L3333: +.L3335: add x21, x19, :lo12:.LANCHOR0 add w22, w22, w0 ldrh w1, [x24,80] @@ -20873,12 +20902,12 @@ zftl_do_gc: mov w0, 65535 cmp w1, w0 uxth w25, w25 - beq .L3341 - cbnz w26, .L3342 + beq .L3343 + cbnz w26, .L3344 ldrh w0, [x21,2872] cmp w20, w0, lsl 1 - bge .L3511 -.L3342: + bge .L3515 +.L3344: add x21, x19, :lo12:.LANCHOR0 mov w1, 5 ldrh w0, [x21,3304] @@ -20889,7 +20918,7 @@ zftl_do_gc: uxth w2, w0 mov w1, 65535 cmp w2, w1 - beq .L3344 + beq .L3346 add x3, x23, :lo12:.LANCHOR4 ubfiz x2, x2, 1, 16 ldr w1, [x3,1132] @@ -20899,112 +20928,112 @@ zftl_do_gc: ldrh w2, [x3,x2] ldrh w3, [x21,3300] cmp w3, w2 - bcs .L3345 + bcs .L3347 ldrh w3, [x21,576] cmp w1, w3, lsr 4 - bls .L3344 + bls .L3346 ldrh w1, [x21,2874] cmp w1, w2 - bls .L3344 -.L3345: + bls .L3346 +.L3347: add x2, x19, :lo12:.LANCHOR0 mov w1, 0 ldrb w2, [x2,3273] bl gc_add_sblk - cbz w0, .L3346 + cbz w0, .L3348 add x23, x23, :lo12:.LANCHOR4 mov w0, 1 str wzr, [x23,1132] strb w0, [x23,1130] - b .L3511 -.L3344: + b .L3515 +.L3346: add x0, x19, :lo12:.LANCHOR0 strh wzr, [x0,3304] -.L3346: +.L3348: cmp w22, 15 mov w21, 2 - bls .L3347 - cbz w25, .L3444 + bls .L3349 + cbz w25, .L3448 add x0, x19, :lo12:.LANCHOR0 mov w21, 1 ldrh w1, [x0,2854] ldrh w0, [x0,3308] cmp w1, w0 - bls .L3347 -.L3444: + bls .L3349 +.L3448: mov w21, 2 -.L3347: +.L3349: adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L3348 + tbz x0, 8, .L3350 add x1, x19, :lo12:.LANCHOR0 mov w3, w20 mov w4, w22 ldr x0, [x1,608] ldrb w2, [x1,3273] - mov w1, 1848 + mov w1, 1853 ldrh w5, [x0,124] ldrh w6, [x0,120] ldrh w7, [x0,122] ldrh w0, [x24,80] str w0, [sp] - adrp x0, .LC272 - add x0, x0, :lo12:.LC272 + adrp x0, .LC274 + add x0, x0, :lo12:.LC274 bl printk -.L3348: +.L3350: add x19, x19, :lo12:.LANCHOR0 mov w1, w21 mov w2, 1 ldrb w0, [x19,3273] bl gc_search_src_blk cmp w0, wzr - ble .L3349 -.L3350: + ble .L3351 +.L3352: add x23, x23, :lo12:.LANCHOR4 mov w0, 1 - b .L3514 -.L3349: + b .L3518 +.L3351: ldrb w0, [x19,3273] mov w1, 3 mov w2, 1 bl gc_search_src_blk cmp w0, wzr - bgt .L3350 - b .L3511 -.L3341: + bgt .L3352 + b .L3515 +.L3343: cmp w26, 1 - bne .L3351 + bne .L3353 bl gc_scan_static_data ldr x0, [x21,608] ldrh w0, [x0,122] - cbz w0, .L3352 -.L3353: + cbz w0, .L3354 +.L3355: add x19, x19, :lo12:.LANCHOR0 mov w0, 1 add x23, x23, :lo12:.LANCHOR4 strb w0, [x19,3273] - b .L3514 -.L3352: + b .L3518 +.L3354: bl gc_static_wearleveling - cbnz w0, .L3353 + cbnz w0, .L3355 bl gc_block_vpn_scan - cbz w22, .L3445 + cbz w22, .L3449 cmp w20, w25 - bcs .L3356 + bcs .L3358 ldrh w0, [x21,3306] cmp w20, w0, lsl 1 - blt .L3357 -.L3356: + blt .L3359 +.L3358: add x0, x19, :lo12:.LANCHOR0 add w1, w20, w25 ldrh w2, [x0,3306] cmp w1, w2, lsl 1 - blt .L3357 + blt .L3359 ldrh w1, [x0,2854] ldrh w0, [x0,3308] cmp w1, w0 - bcc .L3445 -.L3357: + bcc .L3449 +.L3359: add x21, x19, :lo12:.LANCHOR0 add x27, x23, :lo12:.LANCHOR4 mov w28, 1 @@ -21014,17 +21043,17 @@ zftl_do_gc: strb w28, [x21,3273] str w1, [x27,1132] cmp w1, w0, lsr 5 - bls .L3359 + bls .L3361 ldrh w0, [x21,2854] cmp w0, w22 - bls .L3359 + bls .L3361 mov w1, 5 mov w0, 0 bl zftl_get_gc_node uxth w1, w0 mov w0, 65535 cmp w1, w0 - beq .L3445 + beq .L3449 ubfiz x1, x1, 1, 16 ldr x0, [x21,600] ldrb w2, [x21,3276] @@ -21033,47 +21062,47 @@ zftl_do_gc: ldrh w1, [x21,3300] mul w1, w1, w2 cmp w0, w1 - bgt .L3355 + bgt .L3357 str wzr, [x27,1132] mov w0, w28 mov w1, 2 - b .L3504 -.L3359: + b .L3508 +.L3361: add x0, x19, :lo12:.LANCHOR0 ldrh w2, [x0,2854] ldrh w1, [x0,3308] cmp w2, w1 - bcc .L3362 + bcc .L3364 mov w0, 1 mov w1, 2 mov w2, w0 - b .L3505 -.L3362: + b .L3509 +.L3364: ldrh w24, [x0,2850] - cbnz w24, .L3363 + cbnz w24, .L3365 ldrh w0, [x0,2852] cmp w0, 8 - bls .L3355 -.L3363: + bls .L3357 +.L3365: mov w0, 1 mov w1, w0 -.L3504: +.L3508: mov w2, 4 -.L3505: +.L3509: bl gc_search_src_blk uxth w0, w0 - cbnz w0, .L3350 - b .L3445 -.L3351: + cbnz w0, .L3352 + b .L3449 +.L3353: ldrh w0, [x21,2872] cmp w0, w20 - bcc .L3511 -.L3445: + bcc .L3515 +.L3449: mov w24, 16 -.L3355: +.L3357: add x21, x19, :lo12:.LANCHOR0 ldr w0, [x21,2884] - cbz w0, .L3364 + cbz w0, .L3366 mov w0, 1 mov w1, 5 strb w0, [x21,3273] @@ -21083,105 +21112,105 @@ zftl_do_gc: uxth w1, w0 mov w2, 65535 cmp w1, w2 - beq .L3365 + beq .L3367 ubfiz x1, x1, 1, 16 ldr x2, [x21,600] ldrh w1, [x2,x1] cmp w1, 8 - bhi .L3365 + bhi .L3367 mov w2, 1 mov w1, 0 str w2, [x21,2884] bl gc_add_sblk - cbnz w0, .L3350 -.L3365: + cbnz w0, .L3352 +.L3367: mov w1, 4 mov w0, 0 bl zftl_get_gc_node uxth w1, w0 mov w2, 65535 cmp w1, w2 - beq .L3366 + beq .L3368 add x3, x19, :lo12:.LANCHOR0 ubfiz x1, x1, 1, 16 ldr x2, [x3,600] ldrh w1, [x2,x1] cmp w1, 4 - bhi .L3366 + bhi .L3368 mov w2, 1 mov w1, 0 str w2, [x3,2884] bl gc_add_sblk - cbnz w0, .L3350 -.L3366: + cbnz w0, .L3352 +.L3368: mov w0, 0 bl zftl_get_gc_node.part.12 uxth w1, w0 mov w2, 65535 cmp w1, w2 - beq .L3364 + beq .L3366 add x2, x19, :lo12:.LANCHOR0 ubfiz x1, x1, 1, 16 ldr x3, [x2,600] ldrh w1, [x3,x1] cmp w1, 4 - bhi .L3364 + bhi .L3366 mov w1, 1 str w1, [x2,2884] mov w2, 0 bl gc_add_sblk - cbnz w0, .L3350 -.L3364: + cbnz w0, .L3352 +.L3366: add x21, x19, :lo12:.LANCHOR0 mov w0, 1 ldr x7, [x21,608] strb w0, [x21,3273] ldrh w5, [x7,124] - cbz w5, .L3367 + cbz w5, .L3369 add x23, x23, :lo12:.LANCHOR4 strb wzr, [x21,3273] strb w0, [x23,1130] adrp x0, .LANCHOR2 ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L3368 + tbz x0, 8, .L3370 ldrh w6, [x7,120] - adrp x0, .LC273 + adrp x0, .LC275 ldrh w7, [x7,122] - mov w1, 1946 + mov w1, 1951 mov w2, 0 mov w3, w20 mov w4, w22 - add x0, x0, :lo12:.LC273 + add x0, x0, :lo12:.LC275 bl printk - b .L3368 -.L3367: + b .L3370 +.L3369: ldrh w2, [x21,2872] cmp w20, w2 - bcs .L3369 - cbz w22, .L3370 + bcs .L3371 + cbz w22, .L3372 cmp w22, 16 - bls .L3371 + bls .L3373 ldrh w2, [x21,2854] ldrh w1, [x21,3308] cmp w2, w1 - bhi .L3371 + bhi .L3373 mov w1, w0 mov w2, 4 str x5, [x29,104] bl gc_search_src_blk uxth w0, w0 ldr x5, [x29,104] - cbnz w0, .L3372 + cbnz w0, .L3374 ldrb w0, [x21,3273] - b .L3513 -.L3372: + b .L3517 +.L3374: mov w1, 5 mov w0, w5 bl zftl_get_gc_node uxth w2, w0 mov w1, 65535 cmp w2, w1 - beq .L3439 + beq .L3443 add x3, x23, :lo12:.LANCHOR4 ubfiz x2, x2, 1, 16 ldr w1, [x3,1132] @@ -21191,14 +21220,14 @@ zftl_do_gc: ldrh w2, [x3,x2] ldrh w3, [x21,3300] cmp w3, w2 - bcs .L3375 + bcs .L3377 ldrh w3, [x21,576] cmp w1, w3, lsr 4 - bls .L3439 + bls .L3443 ldrh w1, [x21,2874] cmp w1, w2 - bls .L3439 -.L3375: + bls .L3443 +.L3377: add x19, x19, :lo12:.LANCHOR0 mov w1, 0 ldrb w2, [x19,3273] @@ -21207,71 +21236,71 @@ zftl_do_gc: str w0, [x19,2884] add x0, x23, :lo12:.LANCHOR4 str wzr, [x0,1132] - b .L3439 -.L3371: + b .L3443 +.L3373: mov w0, 1 mov w1, 2 mov w2, w0 bl gc_search_src_blk uxth w0, w0 - cbnz w0, .L3439 + cbnz w0, .L3443 add x19, x19, :lo12:.LANCHOR0 -.L3510: +.L3514: ldrb w0, [x19,3273] mov w1, 3 mov w2, 2 -.L3507: +.L3511: bl gc_search_src_blk uxth w0, w0 - b .L3373 -.L3370: + b .L3375 +.L3372: adrp x0, .LANCHOR2 strb w22, [x21,3273] ldr w0, [x0,#:lo12:.LANCHOR2] - tbz x0, 8, .L3377 - adrp x0, .LC273 + tbz x0, 8, .L3379 + adrp x0, .LC275 ldrh w6, [x7,120] ldrh w7, [x7,122] - add x0, x0, :lo12:.LC273 - mov w1, 1976 + add x0, x0, :lo12:.LC275 + mov w1, 1981 mov w2, w22 mov w3, w20 mov w4, w22 mov w5, w22 bl printk -.L3377: +.L3379: add x19, x19, :lo12:.LANCHOR0 cmp w20, 16 ldrb w0, [x19,3273] - bls .L3378 -.L3513: + bls .L3380 +.L3517: mov w1, 3 mov w2, 4 - b .L3507 -.L3378: + b .L3511 +.L3380: mov w1, 1 mov w2, w1 bl gc_search_src_blk uxth w0, w0 - cbnz w0, .L3439 - b .L3510 -.L3369: + cbnz w0, .L3443 + b .L3514 +.L3371: cmp w26, 1 mov w1, w24 - bne .L3484 + bne .L3488 cmp w20, w2, lsl 1 - bge .L3379 + bge .L3381 cmp w25, w22, lsr 1 - bcs .L3380 + bcs .L3382 ldrh w2, [x21,2854] ldrh w0, [x21,3308] cmp w2, w0 - bcs .L3380 + bcs .L3382 ldrh w0, [x21,3306] lsr w0, w0, 2 strh w0, [x21,2872] - b .L3484 -.L3380: + b .L3488 +.L3382: mov w1, 5 mov w0, 0 bl zftl_get_gc_node @@ -21279,12 +21308,12 @@ zftl_do_gc: mov w1, 65535 mov w27, w21 cmp w21, w1 - bne .L3381 -.L3386: + bne .L3383 +.L3388: cmp w22, 1 - bhi .L3382 - b .L3383 -.L3381: + bhi .L3384 + b .L3385 +.L3383: add x26, x23, :lo12:.LANCHOR4 add x2, x19, :lo12:.LANCHOR0 uxtw x21, w21 @@ -21293,94 +21322,94 @@ zftl_do_gc: add w1, w1, 1 str w1, [x26,1132] cmp w1, w3, lsr 4 - bls .L3384 + bls .L3386 ldr x1, [x2,600] str wzr, [x26,1132] ldrh w3, [x1,x21,lsl 1] ldrh w1, [x2,2874] cmp w3, w1 - bcs .L3384 + bcs .L3386 mov w1, 0 mov w2, 1 bl gc_add_sblk - cbz w0, .L3384 + cbz w0, .L3386 mov w0, 1 strb w0, [x26,1130] - b .L3368 -.L3384: + b .L3370 +.L3386: add x1, x19, :lo12:.LANCHOR0 ldr x0, [x1,600] ldrh w2, [x0,x21,lsl 1] ldrh w0, [x1,3300] cmp w2, w0, lsr 1 - bhi .L3385 + bhi .L3387 mov w0, w27 mov w1, 1 mov w2, 0 bl gc_add_sblk - b .L3439 -.L3385: + b .L3443 +.L3387: ldrh w3, [x1,2850] ldrh w0, [x1,2852] add w0, w3, w0 ldrh w3, [x1,3306] cmp w0, w3, lsl 1 - ble .L3386 + ble .L3388 ldrh w0, [x1,2874] cmp w0, w2 - bcc .L3383 - b .L3386 -.L3382: + bcc .L3385 + b .L3388 +.L3384: add x21, x19, :lo12:.LANCHOR0 mov w0, 1 cmp w22, 16 strb w0, [x21,3273] - bls .L3387 + bls .L3389 ldrh w2, [x21,2854] ldrh w1, [x21,3308] cmp w2, w1 - bhi .L3387 + bhi .L3389 mov w1, w0 mov w2, 4 bl gc_search_src_blk uxth w0, w0 - cbnz w0, .L3388 + cbnz w0, .L3390 ldrb w0, [x21,3273] mov w1, 3 mov w2, 4 - b .L3506 -.L3387: + b .L3510 +.L3389: mov w0, 1 mov w1, 2 mov w2, w0 bl gc_search_src_blk uxth w0, w0 - cbnz w0, .L3388 + cbnz w0, .L3390 add x0, x19, :lo12:.LANCHOR0 mov w1, 3 mov w2, 2 ldrb w0, [x0,3273] -.L3506: +.L3510: bl gc_search_src_blk uxth w0, w0 -.L3388: +.L3390: add x19, x19, :lo12:.LANCHOR0 cmp w20, w25, lsr 1 ldrh w1, [x19,3306] - bls .L3508 + bls .L3512 lsr w1, w1, 2 - b .L3509 -.L3383: + b .L3513 +.L3385: cmp w20, w25 add x19, x19, :lo12:.LANCHOR0 - bcs .L3390 + bcs .L3392 mov w0, 4 strb wzr, [x19,3273] bl zftl_get_gc_node.part.12 uxth w0, w0 mov w1, 65535 cmp w0, w1 - beq .L3390 + beq .L3392 ubfiz x0, x0, 1, 16 ldr x1, [x19,600] ldrb w2, [x19,3276] @@ -21388,134 +21417,134 @@ zftl_do_gc: ldrh w0, [x19,3300] mul w0, w0, w2 cmp w1, w0, lsr 1 - bgt .L3390 + bgt .L3392 mov w1, 3 mov w0, 0 mov w2, 4 bl gc_search_src_blk uxth w0, w0 ldrh w1, [x19,3306] -.L3508: +.L3512: lsr w1, w1, 1 -.L3509: +.L3513: strh w1, [x19,2872] - b .L3373 -.L3390: + b .L3375 +.L3392: ldrh w0, [x19,3306] lsr w0, w0, 2 strh w0, [x19,2872] - b .L3368 -.L3379: + b .L3370 +.L3381: ldrh w0, [x21,3306] mov w24, w5 lsr w0, w0, 2 strh w0, [x21,2872] - b .L3368 -.L3373: + b .L3370 +.L3375: mov w1, w24 - cbz w0, .L3484 -.L3439: + cbz w0, .L3488 +.L3443: add x23, x23, :lo12:.LANCHOR4 mov w0, 1 strb w0, [x23,1130] - b .L3368 -.L3335: + b .L3370 +.L3337: add x20, x19, :lo12:.LANCHOR0 mov w0, 65535 ldrh w1, [x20,2896] cmp w1, w0 - bne .L3393 + bne .L3395 bl gc_get_src_blk strh w0, [x20,2896] -.L3393: +.L3395: add x0, x19, :lo12:.LANCHOR0 mov w2, 65535 add x1, x0, 2896 ldrh w3, [x0,2896] cmp w3, w2 - beq .L3512 + beq .L3516 ldrh w5, [x1,56] uxtw x4, w3 ldr x2, [x0,584] add x2, x2, x4, lsl 2 - cbz w5, .L3396 + cbz w5, .L3398 mov x0, 0 -.L3395: +.L3397: cmp w5, w0, uxth - bls .L3396 + bls .L3398 add x0, x0, 1 add x6, x1, x0, lsl 1 ldrh w6, [x6,56] cmp w6, w3 - bne .L3395 -.L3401: + bne .L3397 +.L3403: add x19, x19, :lo12:.LANCHOR0 mov w0, -1 strh w0, [x19,2896] - b .L3511 -.L3396: + b .L3515 +.L3398: ldrb w0, [x2,2] tst w0, 192 - beq .L3452 + beq .L3456 and w0, w0, 224 cmp w0, 224 - bne .L3398 -.L3452: + bne .L3400 +.L3456: add x0, x19, :lo12:.LANCHOR0 ldr x0, [x0,600] ldrh w0, [x0,x4,lsl 1] - cbz w0, .L3401 + cbz w0, .L3403 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2209 + mov w2, 2214 add x1, x1, 800 add x0, x0, :lo12:.LC0 bl printk bl dump_stack - b .L3401 -.L3398: + b .L3403 +.L3400: add x23, x23, :lo12:.LANCHOR4 mov w0, 2 - b .L3514 -.L3336: + b .L3518 +.L3338: bl gc_scan_src_blk cmn w0, #1 - bne .L3402 + bne .L3404 add x23, x23, :lo12:.LANCHOR4 mov w0, 3 -.L3514: +.L3518: strb w0, [x23,1130] - b .L3511 -.L3402: + b .L3515 +.L3404: add x1, x19, :lo12:.LANCHOR0 mov w3, 65535 ldrh w0, [x1,2896] cmp w0, w3 - beq .L3350 + beq .L3352 ldrh w3, [x1,2920] add x23, x23, :lo12:.LANCHOR4 - cbz w3, .L3403 + cbz w3, .L3405 mov w0, 4 strh wzr, [x1,2922] strb w0, [x23,1130] - b .L3511 -.L3403: + b .L3515 +.L3405: ubfiz x0, x0, 1, 16 ldr x1, [x1,600] mov w2, 1 strb w2, [x23,1130] ldrh w0, [x1,x0] - cbz w0, .L3404 + cbz w0, .L3406 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2237 + mov w2, 2242 add x1, x1, 800 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3404: +.L3406: add x20, x19, :lo12:.LANCHOR0 add x21, x20, 2896 ldrh w0, [x20,2896] @@ -21527,70 +21556,70 @@ zftl_do_gc: add w0, w0, 1 uxth w0, w0 cmp w0, 8 - bhi .L3405 + bhi .L3407 strh w0, [x21,30] - b .L3401 -.L3405: + b .L3403 +.L3407: strh wzr, [x21,30] bl ftl_flush bl pm_flush bl ftl_ext_info_flush mov w0, 0 bl ftl_info_flush - b .L3401 -.L3337: + b .L3403 +.L3339: add x21, x19, :lo12:.LANCHOR0 -.L3485: +.L3489: bl gc_scan_src_blk_one_page ldrh w2, [x21,2898] add x0, x21, 2896 ldrh w1, [x21,3300] cmp w2, w1 - bcs .L3407 + bcs .L3409 cmp w20, 7 - bls .L3485 - b .L3511 -.L3407: + bls .L3489 + b .L3515 +.L3409: ldrh w3, [x0,24] adrp x2, .LANCHOR2 - cbz w3, .L3408 + cbz w3, .L3410 add x23, x23, :lo12:.LANCHOR4 mov w1, 4 strh wzr, [x0,26] strb w1, [x23,1130] ldr w1, [x2,#:lo12:.LANCHOR2] - tbz x1, 8, .L3409 + tbz x1, 8, .L3411 ldrh w1, [x0] - adrp x0, .LC274 + adrp x0, .LC276 ldr x4, [x21,600] - add x0, x0, :lo12:.LC274 + add x0, x0, :lo12:.LC276 ubfiz x2, x1, 1, 16 ldrh w2, [x4,x2] bl printk -.L3409: +.L3411: add x0, x19, :lo12:.LANCHOR0 ldrh w2, [x0,2896] ldr x1, [x0,600] ldrh w0, [x0,2920] ldrh w1, [x1,x2,lsl 1] cmp w1, w0 - beq .L3410 + beq .L3412 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2271 + mov w2, 2276 add x1, x1, 800 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3410: +.L3412: add x19, x19, :lo12:.LANCHOR0 ldrh w1, [x19,2896] ldr x0, [x19,600] ldrh w2, [x19,2920] strh w2, [x0,x1,lsl 1] - b .L3511 -.L3408: + b .L3515 +.L3410: add x23, x23, :lo12:.LANCHOR4 ldrh w1, [x0] mov w0, 1 @@ -21598,29 +21627,29 @@ zftl_do_gc: add x20, x20, x1, uxth 2 strb w0, [x23,1130] ldr w0, [x2,#:lo12:.LANCHOR2] - tbz x0, 8, .L3411 + tbz x0, 8, .L3413 ldrb w2, [x20,2] - adrp x0, .LC275 - add x0, x0, :lo12:.LC275 + adrp x0, .LC277 + add x0, x0, :lo12:.LC277 ubfx x2, x2, 5, 3 bl printk -.L3411: +.L3413: ldrb w0, [x20,2] tst w0, 192 - beq .L3453 + beq .L3457 and w0, w0, 224 cmp w0, 224 - bne .L3412 -.L3453: + bne .L3414 +.L3457: adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2281 + mov w2, 2286 add x1, x1, 800 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3412: +.L3414: add x19, x19, :lo12:.LANCHOR0 add x20, x19, 2896 ldrh w0, [x19,2896] @@ -21631,59 +21660,59 @@ zftl_do_gc: add w0, w0, 1 uxth w0, w0 cmp w0, 8 - bhi .L3414 + bhi .L3416 strh w0, [x20,30] - b .L3511 -.L3414: - strh wzr, [x20,30] b .L3515 -.L3338: - cbnz w26, .L3415 +.L3416: + strh wzr, [x20,30] + b .L3519 +.L3340: + cbnz w26, .L3417 add x0, x19, :lo12:.LANCHOR0 ldrh w0, [x0,2872] cmp w0, w20 - bcc .L3511 -.L3415: + bcc .L3515 +.L3417: ldrh w1, [x24,80] mov w0, 65535 cmp w1, w0 - bne .L3416 + bne .L3418 add x22, x19, :lo12:.LANCHOR0 ldrb w21, [x22,3273] cmp w21, 1 - bne .L3416 + bne .L3418 bl ftl_flush ldrh w0, [x22,3214] - cbz w0, .L3417 + cbz w0, .L3419 mov w0, w21 -.L3417: +.L3419: mov w1, 5 bl zftl_gc_get_free_sblk uxth w20, w0 mov w0, 65535 cmp w20, w0 - beq .L3419 + beq .L3421 add x0, x19, :lo12:.LANCHOR0 ldr x21, [x0,584] add x21, x21, x20, uxth 2 ldrb w0, [x21,2] tst w0, 224 - beq .L3420 + beq .L3422 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2310 + mov w2, 2315 add x1, x1, 800 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3420: +.L3422: ldrb w0, [x21,2] mov w1, 5 bfi w0, w1, 5, 3 orr w0, w0, 16 strb w0, [x21,2] -.L3440: +.L3444: mov w0, w20 mov w1, 1 add x19, x19, :lo12:.LANCHOR0 @@ -21740,8 +21769,8 @@ zftl_do_gc: strh wzr, [x19,3212] strh wzr, [x19,3216] bl ftl_info_flush - b .L3511 -.L3416: + b .L3515 +.L3418: cmp w26, 1 mov w21, 4 csinc w21, w21, wzr, eq @@ -21749,23 +21778,23 @@ zftl_do_gc: add w0, w21, 4 add x20, x19, :lo12:.LANCHOR0 csel w21, w0, w21, ls -.L3423: +.L3425: sub w21, w21, #1 uxtb w21, w21 cmp w21, 255 - beq .L3511 + beq .L3515 bl gc_do_copy_back ldrb w0, [x20,3273] - cbnz w0, .L3424 + cbnz w0, .L3426 ldrb w0, [x20,2834] cmp w0, 3 - bhi .L3425 + bhi .L3427 bl ftl_write_commit -.L3425: +.L3427: ldrh w1, [x20,2922] ldrh w0, [x20,2920] cmp w1, w0 - bcc .L3423 + bcc .L3425 add x23, x23, :lo12:.LANCHOR4 mov w0, 1 strb w0, [x23,1130] @@ -21774,41 +21803,41 @@ zftl_do_gc: ldrh w1, [x20,2896] ldr x0, [x20,600] ldrh w0, [x0,x1,lsl 1] - cbz w0, .L3427 + cbz w0, .L3429 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2385 + mov w2, 2390 add x1, x1, 800 add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3427: +.L3429: add x1, x19, :lo12:.LANCHOR0 ldrh w0, [x1,2896] ldr x3, [x1,600] ubfiz x2, x0, 1, 16 ldrh w4, [x3,x2] - cbnz w4, .L3428 + cbnz w4, .L3430 strh w4, [x3,x2] ldrh w0, [x1,2896] bl ftl_free_sblk - b .L3401 -.L3428: + b .L3403 +.L3430: mov w1, 0 mov w2, 1 bl gc_add_sblk - b .L3401 -.L3424: + b .L3403 +.L3426: add x0, x20, 2896 ldrh w1, [x0,320] - cbz w1, .L3429 + cbz w1, .L3431 strh wzr, [x0,320] ldr w0, [x0,324] cmn w0, #1 - beq .L3430 + beq .L3432 bl ftl_mask_bad_block -.L3430: +.L3432: add x20, x19, :lo12:.LANCHOR0 ldr x0, [x20,608] str wzr, [x20,3220] @@ -21822,9 +21851,9 @@ zftl_do_gc: strh w0, [x2,126] strh w0, [x1,130] ldr x0, [x20,2904] - cbz x0, .L3431 + cbz x0, .L3433 bl buf_free -.L3431: +.L3433: add x19, x19, :lo12:.LANCHOR0 add x23, x23, :lo12:.LANCHOR4 str xzr, [x19,2904] @@ -21832,21 +21861,21 @@ zftl_do_gc: adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2421 + mov w2, 2426 add x1, x1, 800 add x0, x0, :lo12:.LC0 strb wzr, [x23,1130] bl printk bl dump_stack - b .L3511 -.L3429: + b .L3515 +.L3431: ldrh w1, [x24,86] cmp w1, 1 - bls .L3432 + bls .L3434 ldrh w2, [x0,26] ldrh w1, [x0,24] cmp w2, w1 - bcc .L3423 + bcc .L3425 add x23, x23, :lo12:.LANCHOR4 mov w1, 1 strb w1, [x23,1130] @@ -21858,15 +21887,15 @@ zftl_do_gc: strh w2, [x1,58] mov w1, -1 strh w1, [x0] - b .L3511 -.L3432: + b .L3515 +.L3434: add x23, x23, :lo12:.LANCHOR4 mov w1, 5 ldrh w2, [x0,26] strb w1, [x23,1130] ldrh w1, [x0,24] cmp w2, w1 - bcc .L3433 + bcc .L3435 ldrh w1, [x0,56] add w2, w1, 1 add x1, x0, x1, sxtw 1 @@ -21875,7 +21904,7 @@ zftl_do_gc: strh w2, [x1,58] mov w1, -1 strh w1, [x0] -.L3433: +.L3435: add x20, x19, :lo12:.LANCHOR0 bl ftl_flush bl sblk_wait_write_queue_completed @@ -21891,21 +21920,23 @@ zftl_do_gc: strh w1, [x20,2914] cmp w2, 2 strh w2, [x20,2916] - bne .L3434 + bne .L3437 lsl w1, w1, 1 strh w1, [x20,2914] + ldrb w1, [x20,3348] + cbnz w1, .L3437 mov w1, 1 strh w1, [x20,2916] -.L3434: +.L3437: add x19, x19, :lo12:.LANCHOR0 strh wzr, [x19,2918] - b .L3511 -.L3442: + b .L3515 +.L3446: mov w21, 0 add x24, x19, :lo12:.LANCHOR0 -.L3339: +.L3341: bl gc_check_data_one_wl - cbz w0, .L3436 + cbz w0, .L3440 add x19, x19, :lo12:.LANCHOR0 add x23, x23, :lo12:.LANCHOR4 ldr x0, [x19,608] @@ -21922,32 +21953,32 @@ zftl_do_gc: bl buf_free str xzr, [x19,2904] strb wzr, [x23,1130] -.L3515: +.L3519: bl flt_sys_flush - b .L3511 -.L3436: + b .L3515 +.L3440: ldrh w1, [x24,2912] ldrh w0, [x24,2914] cmp w1, w0 - bcc .L3437 + bcc .L3441 add x23, x23, :lo12:.LANCHOR4 mov w0, 6 strb w0, [x23,1130] ldr x0, [x24,2904] bl buf_free str xzr, [x24,2904] - b .L3511 -.L3437: + b .L3515 +.L3441: cmp w20, 15 - bls .L3339 + bls .L3341 cmp w26, 1 - bne .L3511 + bne .L3515 add w21, w21, 1 uxtb w21, w21 cmp w21, 4 - bls .L3339 - b .L3511 -.L3340: + bls .L3341 + b .L3515 +.L3342: bl gc_update_l2p_map_new mov w20, -1 bl gc_free_src_blk @@ -21960,26 +21991,26 @@ zftl_do_gc: strh w20, [x0,126] mov w0, 0 bl ftl_info_flush -.L3512: +.L3516: add x23, x23, :lo12:.LANCHOR4 strb wzr, [x23,1130] -.L3511: +.L3515: mov w1, 16 - b .L3484 -.L3368: + b .L3488 +.L3370: mov w1, w24 - b .L3484 -.L3419: + b .L3488 +.L3421: adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 - mov w2, 2316 + mov w2, 2321 add x1, x1, 800 add x0, x0, :lo12:.LC0 bl printk bl dump_stack - b .L3440 -.L3484: + b .L3444 +.L3488: sub sp, x29, #16 mov w0, w1 ldp x19, x20, [sp,32] @@ -22008,30 +22039,30 @@ zftl_write: stp x21, x22, [sp,32] mov w28, w1 mov x25, x3 - tbz x0, 12, .L3517 - adrp x0, .LC276 + tbz x0, 12, .L3521 + adrp x0, .LC278 mov w1, w19 - add x0, x0, :lo12:.LC276 + add x0, x0, :lo12:.LC278 mov w2, w28 mov w3, w23 bl printk -.L3517: - cbnz w19, .L3518 +.L3521: + cbnz w19, .L3522 adrp x0, .LANCHOR0+520 mov w19, 24576 ldr w2, [x0,#:lo12:.LANCHOR0+520] - b .L3519 -.L3518: + b .L3523 +.L3522: cmp w19, 3 mov w0, -1 - bhi .L3520 + bhi .L3524 lsl w19, w19, 13 mov w2, 8192 -.L3519: +.L3523: add w1, w28, w23 mov w0, -1 cmp w1, w2 - bhi .L3520 + bhi .L3524 add w28, w19, w28 adrp x19, .LANCHOR0 add x0, x19, :lo12:.LANCHOR0 @@ -22044,15 +22075,15 @@ zftl_write: udiv w22, w22, w0 sub w20, w22, w24 add w20, w20, 1 -.L3521: - cbz w20, .L3540 +.L3525: + cbz w20, .L3544 mov w0, 0 bl buf_alloc mov x27, x0 - cbnz x0, .L3522 + cbnz x0, .L3526 bl ftl_write_commit - b .L3521 -.L3522: + b .L3525 +.L3526: strb wzr, [x0,57] add x0, x19, :lo12:.LANCHOR0 cmp w21, w24 @@ -22060,12 +22091,12 @@ zftl_write: cset w0, eq strb w4, [x27,56] cmp w21, w22 - beq .L3524 - cbz w0, .L3525 - b .L3534 -.L3524: - cbz w0, .L3526 -.L3534: + beq .L3528 + cbz w0, .L3529 + b .L3538 +.L3528: + cbz w0, .L3530 +.L3538: udiv w0, w28, w4 msub w0, w0, w4, w28 uxtb w0, w0 @@ -22074,12 +22105,12 @@ zftl_write: uxtb w4, w4 cmp w4, w23 csel w4, w23, w4, hi - b .L3538 -.L3526: + b .L3542 +.L3530: msub w4, w4, w21, w26 -.L3538: +.L3542: strb w4, [x27,56] -.L3525: +.L3529: ldrb w1, [x27,57] sub w20, w20, #1 ldr x0, [x27,8] @@ -22100,11 +22131,11 @@ zftl_write: bl ftl_write_buf ldrb w0, [x27,56] add x25, x25, x0, lsl 9 - b .L3521 -.L3540: + b .L3525 +.L3544: bl ftl_write_commit mov w0, w20 -.L3539: +.L3543: mov w1, 1 bl zftl_do_gc add x1, x19, :lo12:.LANCHOR0 @@ -22112,15 +22143,15 @@ zftl_write: ldrh w0, [x1,2848] add w0, w2, w0 cmp w0, 7 - bgt .L3541 + bgt .L3545 mov w0, 0 - b .L3539 -.L3541: + b .L3543 +.L3545: bl timer_get_time adrp x1, .LANCHOR7-76 str w0, [x1,#:lo12:.LANCHOR7-76] mov w0, 0 -.L3520: +.L3524: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -22178,7 +22209,7 @@ zftl_discard: stp x27, x28, [sp,80] ldr w1, [x1,520] cmp w2, w1 - bhi .L3545 + bhi .L3549 adrp x23, .LANCHOR7 add w24, w0, 24576 add x0, x23, :lo12:.LANCHOR7 @@ -22187,14 +22218,14 @@ zftl_discard: add w1, w19, w1 str w1, [x0,-72] ldr w0, [x25,#:lo12:.LANCHOR2] - tbz x0, 12, .L3546 - adrp x0, .LC277 + tbz x0, 12, .L3550 + adrp x0, .LC279 mov w2, w24 - add x0, x0, :lo12:.LC277 + add x0, x0, :lo12:.LC279 mov w3, w19 mov w4, 0 bl printk -.L3546: +.L3550: add x20, x21, :lo12:.LANCHOR0 ldr x0, [x20,2864] ldr w26, [x0,8] @@ -22205,7 +22236,7 @@ zftl_discard: ldrb w22, [x20,2832] udiv w20, w24, w22 msub w27, w20, w22, w24 - cbz w27, .L3547 + cbz w27, .L3551 sub w22, w22, w27 mov w0, w20 cmp w22, w19 @@ -22213,20 +22244,20 @@ zftl_discard: bl lpa_hash_get_ppa str w0, [x29,120] cmn w0, #1 - bne .L3548 + bne .L3552 mov w0, w20 add x1, x29, 120 mov w2, 0 bl pm_log2phys -.L3548: +.L3552: ldr w0, [x29,120] and w28, w22, 65535 cmn w0, #1 - beq .L3550 + beq .L3554 mov w0, 0 bl buf_alloc mov x3, x0 - cbz x0, .L3550 + cbz x0, .L3554 strb w27, [x0,57] ubfiz x27, x27, 9, 25 str w20, [x0,36] @@ -22247,31 +22278,31 @@ zftl_discard: ldr w0, [x1,76] add w0, w0, 1 str w0, [x1,76] -.L3550: +.L3554: add w20, w20, 1 sub w19, w19, w28 -.L3547: - cbz w19, .L3552 +.L3551: + cbz w19, .L3556 bl ftl_flush -.L3552: +.L3556: mov w0, -1 mov w27, 1 str w0, [x29,124] mov w28, 21 -.L3553: +.L3557: add x22, x21, :lo12:.LANCHOR0 ldrb w0, [x22,2832] cmp w19, w0 - bcc .L3592 + bcc .L3596 mov w0, w20 bl lpa_hash_get_ppa str w0, [x29,120] cmn w0, #1 - beq .L3554 + beq .L3558 mov w0, 0 bl buf_alloc mov x3, x0 - cbz x0, .L3556 + cbz x0, .L3560 ldrb w2, [x22,2832] mov w1, 0 str w20, [x0,36] @@ -22286,15 +22317,15 @@ zftl_discard: mov x0, x3 bl ftl_write_buf bl ftl_write_commit - b .L3591 -.L3554: + b .L3595 +.L3558: mov w0, w20 add x1, x29, 120 mov w2, 0 bl pm_log2phys ldr w0, [x29,120] cmn w0, #1 - beq .L3556 + beq .L3560 add x1, x29, 124 mov w2, 1 mov w0, w20 @@ -22309,36 +22340,36 @@ zftl_discard: and w0, w2, w0 udiv w0, w0, w1 bl ftl_vpn_decrement -.L3591: +.L3595: ldr x1, [x22,2864] ldr w0, [x1,76] add w0, w0, 1 str w0, [x1,76] -.L3556: +.L3560: add x0, x21, :lo12:.LANCHOR0 add w20, w20, 1 ldrb w0, [x0,2832] sub w19, w19, w0 - b .L3553 -.L3592: - cbz w19, .L3560 + b .L3557 +.L3596: + cbz w19, .L3564 mov w0, w20 bl lpa_hash_get_ppa str w0, [x29,120] cmn w0, #1 - bne .L3561 + bne .L3565 mov w0, w20 add x1, x29, 120 mov w2, 0 bl pm_log2phys -.L3561: +.L3565: ldr w0, [x29,120] cmn w0, #1 - beq .L3560 + beq .L3564 mov w0, 0 bl buf_alloc mov x22, x0 - cbz x0, .L3560 + cbz x0, .L3564 str w20, [x0,36] strb wzr, [x0,57] strb w19, [x0,56] @@ -22346,7 +22377,7 @@ zftl_discard: add x0, x21, :lo12:.LANCHOR0 ldrb w0, [x0,2832] cmp w19, w0 - bcc .L3563 + bcc .L3567 adrp x1, .LANCHOR3 adrp x0, .LC0 add x1, x1, :lo12:.LANCHOR3 @@ -22355,7 +22386,7 @@ zftl_discard: add x0, x0, :lo12:.LC0 bl printk bl dump_stack -.L3563: +.L3567: ldr x0, [x22,8] mov w1, 0 lsl w2, w19, 9 @@ -22368,20 +22399,20 @@ zftl_discard: ldr w0, [x1,76] add w0, w0, 1 str w0, [x1,76] -.L3560: +.L3564: add x0, x23, :lo12:.LANCHOR7 mov w4, 0 ldr w1, [x0,-72] cmp w1, 8192 - bls .L3545 + bls .L3549 ldr w0, [x25,#:lo12:.LANCHOR2] - tbz x0, 12, .L3564 - adrp x0, .LC277 + tbz x0, 12, .L3568 + adrp x0, .LC279 mov w2, w24 - add x0, x0, :lo12:.LC277 + add x0, x0, :lo12:.LC279 mov w3, w19 bl printk -.L3564: +.L3568: add x23, x23, :lo12:.LANCHOR7 add x21, x21, :lo12:.LANCHOR0 str wzr, [x23,-72] @@ -22389,7 +22420,7 @@ zftl_discard: mov w0, 1 mov w4, 0 str w0, [x21,2884] -.L3545: +.L3549: mov w0, w4 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -22419,29 +22450,29 @@ id_block_prog_msb_ff_data: ldrb w2, [x0,19] add x0, x20, :lo12:.LANCHOR4 ldrb w0, [x0,1264] - cbnz w0, .L3593 + cbnz w0, .L3597 sub w0, w2, #5 uxtb w0, w0 cmp w0, 2 - bls .L3595 + bls .L3599 cmp w2, 68 - beq .L3595 + beq .L3599 sub w2, w2, #19 and w2, w2, -17 uxtb w2, w2 - cbnz w2, .L3593 -.L3595: - adrp x24, .LC278 + cbnz w2, .L3597 +.L3599: + adrp x24, .LC280 mov w25, w1 - add x24, x24, :lo12:.LC278 + add x24, x24, :lo12:.LC280 add x20, x20, :lo12:.LANCHOR4 mov w27, 65535 -.L3597: +.L3601: add x28, x21, :lo12:.LANCHOR0 ldr x0, [x28,624] ldrh w0, [x0,10] cmp w0, w19 - bls .L3593 + bls .L3597 add x22, x20, 68 add w26, w19, w25 mov x0, x24 @@ -22451,7 +22482,7 @@ id_block_prog_msb_ff_data: bl printk ldrh w0, [x22,w19,sxtw 1] cmp w0, w27 - bne .L3593 + bne .L3597 ldr x0, [x20,1192] mov w1, 255 mov w2, 16384 @@ -22465,8 +22496,8 @@ id_block_prog_msb_ff_data: ldrb w4, [x4,9] mov x3, x2 bl flash_prog_page - b .L3597 -.L3593: + b .L3601 +.L3597: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -22499,17 +22530,17 @@ write_idblock: bl ftl_malloc mov x23, x0 mov w0, -1 - cbz x23, .L3644 + cbz x23, .L3648 add w19, w19, 511 lsr w19, w19, 9 cmp w19, 8 - bls .L3630 + bls .L3634 cmp w19, 500 - bhi .L3644 - b .L3601 -.L3630: + bhi .L3648 + b .L3605 +.L3634: mov w19, 8 -.L3601: +.L3605: mul w20, w20, w21 add x3, x26, 253952 mov w2, 63999 @@ -22520,9 +22551,9 @@ write_idblock: udiv w0, w19, w0 str w0, [x29,120] mov w0, 0 -.L3605: +.L3609: ldr w1, [x3] - cbnz w1, .L3602 + cbnz w1, .L3606 ldr w1, [x26,w0,uxtw 2] add w0, w0, 1 cmp w0, w4 @@ -22530,56 +22561,56 @@ write_idblock: csel w0, w0, wzr, cc str w1, [x3],-4 cmp w2, 4096 - bne .L3605 - b .L3604 -.L3602: - adrp x0, .LC279 - add x0, x0, :lo12:.LC279 + bne .L3609 + b .L3608 +.L3606: + adrp x0, .LC281 + add x0, x0, :lo12:.LC281 bl printk -.L3604: +.L3608: ldr x1, [x29,128] - adrp x0, .LC280 - add x0, x0, :lo12:.LC280 + adrp x0, .LC282 + add x0, x0, :lo12:.LC282 mov w2, 4 mov w3, 5 mov x21, 0 mov w28, w21 bl rknand_print_hex - adrp x0, .LC281 + adrp x0, .LC283 mov w1, w19 - add x0, x0, :lo12:.LC281 + add x0, x0, :lo12:.LC283 mov w2, w19 bl printk -.L3627: +.L3631: adrp x1, .LANCHOR7 add x1, x1, :lo12:.LANCHOR7 ldrb w1, [x1,-102] - cbnz w1, .L3606 + cbnz w1, .L3610 ldr x1, [x29,128] ldr w2, [x29,152] ldr w1, [x1,x21,lsl 2] mul w20, w1, w2 - cbz w21, .L3607 + cbz w21, .L3611 ldr w2, [x29,120] cmp w2, 1 - bls .L3607 + bls .L3611 sub w0, w21, #1 ldr x2, [x29,128] ldr w0, [x2,x0,lsl 2] add w0, w0, 1 cmp w1, w0 - bne .L3607 - b .L3608 -.L3606: + bne .L3611 + b .L3612 +.L3610: add x0, x22, :lo12:.LANCHOR0 ldr x0, [x0,728] add x0, x0, x21, uxtw ldrb w20, [x0,32] cmp w20, 255 - beq .L3608 + beq .L3612 ldr w0, [x29,152] mul w20, w20, w0 -.L3607: +.L3611: mov w2, 512 mov w1, 0 mov x0, x23 @@ -22598,12 +22629,12 @@ write_idblock: bl flash_erase_block cmp w19, w24 mov w2, 1 - bls .L3609 + bls .L3613 mov w0, 0 add w1, w20, w24 bl flash_erase_block mov w2, 2 -.L3609: +.L3613: add x27, x22, :lo12:.LANCHOR0 ldr x1, [x27,624] ldrh w0, [x1,10] @@ -22618,10 +22649,10 @@ write_idblock: sub w0, w20, w0 str w0, [x29,156] cmp w20, w0 - bne .L3634 + bne .L3638 ldrb w0, [x27,516] cmp w0, 9 - bne .L3634 + bne .L3638 adrp x0, .LANCHOR4 mov w1, 0 add x0, x0, :lo12:.LANCHOR4 @@ -22659,18 +22690,18 @@ write_idblock: str w0, [x3,8] sub w0, w19, #4 str w0, [x29,144] - b .L3610 -.L3634: + b .L3614 +.L3638: str w19, [x29,144] mov x3, 0 -.L3610: +.L3614: str x26, [x29,136] mov w24, 0 add x27, x22, :lo12:.LANCHOR0 -.L3612: +.L3616: ldr w0, [x29,112] cmp w24, w0 - bcs .L3653 + bcs .L3657 ldr w0, [x29,124] adrp x2, .LANCHOR4 add x2, x2, :lo12:.LANCHOR4 @@ -22680,34 +22711,34 @@ write_idblock: add w1, w4, 1 ldrb w2, [x2,1264] ldrh w0, [x0,w1,sxtw 1] - cbz w2, .L3614 + cbz w2, .L3618 ldrb w6, [x27,1] lsl w0, w1, 1 cmp w6, wzr csel w0, w0, w1, ne -.L3614: +.L3618: ldrb w1, [x27,516] cmp w1, 9 - beq .L3652 + beq .L3656 sub w0, w0, #1 lsl w0, w0, 2 -.L3652: +.L3656: str w0, [x29,160] mov w0, 61424 str w0, [x29,164] add x0, x27, 4 ldrh w0, [x0,w4,sxtw 1] - cbnz w2, .L3618 + cbnz w2, .L3622 mov w4, w0 - b .L3619 -.L3618: + b .L3623 +.L3622: ldrb w1, [x27,1] lsl w0, w4, 1 cmp w1, wzr csel w4, w0, w4, ne -.L3619: +.L3623: mul w0, w4, w25 - cbnz x3, .L3620 + cbnz x3, .L3624 ldr w1, [x29,156] add x2, x29, 160 str x4, [x29,104] @@ -22718,28 +22749,28 @@ write_idblock: ldr x4, [x29,104] add x0, x0, :lo12:.LANCHOR4 ldrb w0, [x0,1264] - cbnz w0, .L3621 + cbnz w0, .L3625 ldr w1, [x29,156] add w2, w4, 1 udiv w1, w1, w25 bl id_block_prog_msb_ff_data -.L3621: +.L3625: ldr x0, [x29,136] add x0, x0, 2048 str x0, [x29,136] - b .L3622 -.L3620: + b .L3626 +.L3624: ldr w1, [x29,156] add x2, x29, 160 add w0, w0, w1 mov x1, x3 bl fw_flash_page_prog.constprop.28 -.L3622: +.L3626: add w24, w24, 4 mov x3, 0 uxth w24, w24 - b .L3612 -.L3653: + b .L3616 +.L3657: add x0, x22, :lo12:.LANCHOR0 ldrb w1, [x29,116] mov x2, x23 @@ -22750,15 +22781,15 @@ write_idblock: ldr w0, [x29,144] mov x1, 0 lsl w0, w0, 7 -.L3624: +.L3628: cmp w0, w1 - bls .L3654 + bls .L3658 ldr w3, [x23,x1,lsl 2] add x1, x1, 1 add x2, x26, x1, lsl 2 ldr w2, [x2,-4] cmp w3, w2 - beq .L3624 + beq .L3628 mov x0, x23 mov w1, 0 mov w2, 512 @@ -22766,21 +22797,21 @@ write_idblock: mov w1, w20 mov w0, 0 bl flash_erase_block - b .L3608 -.L3654: + b .L3612 +.L3658: add w28, w28, 1 cmp w28, 5 - bhi .L3628 -.L3608: + bhi .L3632 +.L3612: add x21, x21, 1 cmp x21, 4 - bne .L3627 -.L3628: + bne .L3631 +.L3632: mov x0, x23 bl ftl_free cmp w28, wzr csetm w0, eq -.L3644: +.L3648: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x23, x24, [sp,48] @@ -22798,17 +22829,17 @@ CRC_32: mov x5, x0 add x3, x3, :lo12:.LANCHOR2 mov w0, w2 -.L3656: +.L3660: cmp w1, w2 - bls .L3658 + bls .L3662 ldrb w4, [x5,x2] add x6, x3, 2296 add x2, x2, 1 eor w4, w4, w0, lsr 24 ldr w4, [x6,w4,uxtw 2] eor w0, w4, w0, lsl 8 - b .L3656 -.L3658: + b .L3660 +.L3662: ret .size CRC_32, .-CRC_32 .align 2 @@ -22825,146 +22856,146 @@ rknand_sys_storage_ioctl: stp x21, x22, [sp,32] mov w19, w1 mov x20, x2 - beq .L3661 + beq .L3665 mov w0, 29187 movk w0, 0x4004, lsl 16 cmp w1, w0 - bhi .L3662 + bhi .L3666 mov w0, 25726 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3663 + beq .L3667 mov w0, 25726 movk w0, 0x4004, lsl 16 cmp w1, w0 - bhi .L3664 + bhi .L3668 mov w0, 25601 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3665 + beq .L3669 mov w0, 25601 movk w0, 0x4004, lsl 16 cmp w1, w0 - bhi .L3666 + bhi .L3670 mov w0, 25364 movk w0, 0x4004, lsl 16 cmp w1, w0 - bne .L3723 + bne .L3727 bl rknand_dev_flush - b .L3757 -.L3666: + b .L3761 +.L3670: mov w0, 25602 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3668 + beq .L3672 mov w0, 25603 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3669 - b .L3723 -.L3664: + beq .L3673 + b .L3727 +.L3668: mov w0, 27688 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3670 + beq .L3674 mov w0, 27688 movk w0, 0x4004, lsl 16 cmp w1, w0 - bhi .L3671 + bhi .L3675 mov w0, 25727 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3672 - b .L3723 -.L3671: + beq .L3676 + b .L3727 +.L3675: mov w0, 27698 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3670 + beq .L3674 mov w0, 27708 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3670 - b .L3723 -.L3662: + beq .L3674 + b .L3727 +.L3666: mov w0, 29267 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3673 + beq .L3677 mov w0, 29267 movk w0, 0x4004, lsl 16 cmp w1, w0 - bhi .L3674 + bhi .L3678 mov w0, 29189 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3675 + beq .L3679 mov w0, 29189 movk w0, 0x4004, lsl 16 cmp w1, w0 - bcc .L3676 + bcc .L3680 mov w0, 29210 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3677 + beq .L3681 mov w0, 29266 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3678 - b .L3723 -.L3674: + beq .L3682 + b .L3727 +.L3678: mov w0, 30225 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3679 + beq .L3683 mov w0, 30225 movk w0, 0x4004, lsl 16 cmp w1, w0 - bhi .L3680 + bhi .L3684 mov w0, 29268 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3681 + beq .L3685 mov w0, 30224 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3682 - b .L3723 -.L3680: + beq .L3686 + b .L3727 +.L3684: mov w0, 30226 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3682 + beq .L3686 mov w0, 30227 movk w0, 0x4004, lsl 16 cmp w1, w0 - beq .L3679 - b .L3723 -.L3676: - adrp x0, .LC282 - add x0, x0, :lo12:.LC282 + beq .L3683 + b .L3727 +.L3680: + adrp x0, .LC284 + add x0, x0, :lo12:.LC284 bl printk mov w0, 4096 bl ftl_malloc mov x19, x0 - cbnz x0, .L3683 -.L3688: + cbnz x0, .L3687 +.L3692: mov x0, -12 - b .L3660 -.L3683: + b .L3664 +.L3687: mov x1, x20 mov x2, 512 bl rk_copy_from_user - cbnz x0, .L3764 - adrp x0, .LC284 + cbnz x0, .L3768 + adrp x0, .LC286 ldr w1, [x19] ldr w2, [x19,4] - add x0, x0, :lo12:.LC284 + add x0, x0, :lo12:.LC286 bl printk ldr w0, [x19,4] str w0, [x29,52] cmp w0, 8 - bhi .L3761 + bhi .L3765 bl rknand_device_lock ldr w1, [x29,52] mov x2, x19 @@ -22976,106 +23007,106 @@ rknand_sys_storage_ioctl: mov x1, x19 ubfiz x2, x2, 9, 23 bl rk_copy_to_user - cbz x0, .L3767 - adrp x0, .LC285 - add x0, x0, :lo12:.LC285 -.L3759: + cbz x0, .L3771 + adrp x0, .LC287 + add x0, x0, :lo12:.LC287 +.L3763: bl printk -.L3761: +.L3765: mov x0, x19 -.L3762: +.L3766: bl ftl_free -.L3760: +.L3764: mov x0, -14 - b .L3660 -.L3675: - adrp x0, .LC286 - add x0, x0, :lo12:.LC286 + b .L3664 +.L3679: + adrp x0, .LC288 + add x0, x0, :lo12:.LC288 bl printk mov w0, 4096 bl ftl_malloc mov x19, x0 - cbz x0, .L3688 + cbz x0, .L3692 mov x1, x20 mov x2, 4096 bl rk_copy_from_user - cbnz x0, .L3764 - adrp x0, .LC287 + cbnz x0, .L3768 + adrp x0, .LC289 ldr w1, [x19] ldr w2, [x19,4] - add x0, x0, :lo12:.LC287 + add x0, x0, :lo12:.LC289 bl printk adrp x0, .LANCHOR7 add x22, x0, :lo12:.LANCHOR7 mov x20, x0 ldr x21, [x22,-64] - cbnz x21, .L3690 + cbnz x21, .L3694 mov w0, 260096 bl ftl_malloc str x0, [x22,-64] - cbz x0, .L3761 + cbz x0, .L3765 mov w1, w21 mov x2, 260096 bl memset -.L3690: +.L3694: ldr w2, [x19,4] cmp w2, 4088 - bhi .L3761 + bhi .L3765 ldr w0, [x19] mov w1, 55296 movk w1, 0x3, lsl 16 cmp w0, w1 - bhi .L3761 + bhi .L3765 add x20, x20, :lo12:.LANCHOR7 uxtw x2, w2 ldr x1, [x20,-64] add x0, x1, x0, uxtw add x1, x19, 8 bl memcpy -.L3767: +.L3771: mov x0, x19 bl ftl_free - b .L3757 -.L3678: - adrp x0, .LC288 - add x0, x0, :lo12:.LC288 + b .L3761 +.L3682: + adrp x0, .LC290 + add x0, x0, :lo12:.LC290 bl printk mov w0, 4096 bl ftl_malloc mov x19, x0 - cbz x0, .L3688 + cbz x0, .L3692 mov x1, x20 mov x2, 28 bl rk_copy_from_user - cbz x0, .L3693 -.L3764: - adrp x0, .LC283 - add x0, x0, :lo12:.LC283 - b .L3759 -.L3693: + cbz x0, .L3697 +.L3768: + adrp x0, .LC285 + add x0, x0, :lo12:.LC285 + b .L3763 +.L3697: ldr w1, [x19] - adrp x0, .LC289 + adrp x0, .LC291 ldr w2, [x19,4] - add x0, x0, :lo12:.LC289 + add x0, x0, :lo12:.LC291 bl printk ldr w1, [x19] mov w0, 59392 movk w0, 0x3, lsl 16 cmp w1, w0 - bhi .L3761 + bhi .L3765 adrp x20, .LANCHOR7 add x20, x20, :lo12:.LANCHOR7 ldr x0, [x20,-64] - cbz x0, .L3761 + cbz x0, .L3765 bl CRC_32 ldr w1, [x19,4] cmp w1, w0 - beq .L3696 + beq .L3700 mov x0, x19 bl ftl_free mov x0, -2 - b .L3660 -.L3696: + b .L3664 +.L3700: bl rknand_device_lock ldr x1, [x20,-64] add x2, x19, 8 @@ -23085,39 +23116,39 @@ rknand_sys_storage_ioctl: ldr x0, [x20,-64] bl ftl_free str xzr, [x20,-64] - b .L3767 -.L3677: - adrp x0, .LC290 - add x0, x0, :lo12:.LC290 + b .L3771 +.L3681: + adrp x0, .LC292 + add x0, x0, :lo12:.LC292 bl printk mov w0, 4096 bl ftl_malloc mov x21, x0 - cbz x0, .L3688 + cbz x0, .L3692 bl ReadFlashInfo mov x0, x20 mov x1, x21 mov x2, 11 - b .L3769 -.L3661: - adrp x0, .LC291 - add x0, x0, :lo12:.LC291 + b .L3773 +.L3665: + adrp x0, .LC293 + add x0, x0, :lo12:.LC293 bl printk bl nand_blk_add_whole_disk mov w0, 4096 bl ftl_malloc mov x21, x0 - cbz x0, .L3688 + cbz x0, .L3692 mov w1, 0 mov w2, 64 bl ftl_memset mov x0, x20 mov x1, x21 mov x2, 64 - b .L3769 -.L3673: - adrp x0, .LC292 - add x0, x0, :lo12:.LC292 + b .L3773 +.L3677: + adrp x0, .LC294 + add x0, x0, :lo12:.LC294 bl printk adrp x0, .LANCHOR7-56 add x1, x29, 52 @@ -23126,18 +23157,18 @@ rknand_sys_storage_ioctl: ldr w0, [x0,20] str w0, [x29,52] mov x0, x20 -.L3752: +.L3756: bl rk_copy_to_user - cbnz x0, .L3760 - b .L3757 -.L3681: - adrp x0, .LC293 - add x0, x0, :lo12:.LC293 + cbnz x0, .L3764 + b .L3761 +.L3685: + adrp x0, .LC295 + add x0, x0, :lo12:.LC295 bl printk mov w0, 4096 bl ftl_malloc mov x21, x0 - cbz x0, .L3688 + cbz x0, .L3692 bl rknand_device_lock mov w1, 264 mov w2, 2 @@ -23148,41 +23179,41 @@ rknand_sys_storage_ioctl: mov x0, x20 mov x1, x21 mov x2, 1024 -.L3769: +.L3773: bl rk_copy_to_user mov x19, x0 mov x0, x21 - cbnz x19, .L3762 + cbnz x19, .L3766 bl ftl_free - b .L3687 -.L3665: - adrp x0, .LC294 - add x0, x0, :lo12:.LC294 + b .L3691 +.L3669: + adrp x0, .LC296 + add x0, x0, :lo12:.LC296 bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user mov x19, x0 - cbz x0, .L3701 -.L3706: - adrp x0, .LC283 - add x0, x0, :lo12:.LC283 + cbz x0, .L3705 +.L3710: + adrp x0, .LC285 + add x0, x0, :lo12:.LC285 bl printk - b .L3760 -.L3701: + b .L3764 +.L3705: ldr w1, [x29,56] mov w0, 21060 movk w0, 0x4b4d, lsl 16 cmp w1, w0 - beq .L3702 -.L3703: + beq .L3706 +.L3707: mov x19, -1 - b .L3687 -.L3702: + b .L3691 +.L3706: ldr w0, [x29,60] cmp w0, 512 - bhi .L3703 + bhi .L3707 adrp x21, .LANCHOR7 add x0, x29, 56 add x21, x21, :lo12:.LANCHOR7 @@ -23193,37 +23224,37 @@ rknand_sys_storage_ioctl: mov w0, 5161 movk w0, 0xc059, lsl 16 cmp w1, w0 - beq .L3704 + beq .L3708 add x0, x29, 120 mov w1, w19 mov x2, 128 str w19, [x29,64] str w19, [x29,68] bl memset -.L3704: +.L3708: add x0, x29, 312 mov w1, 0 mov x2, 256 str wzr, [x29,72] bl memset - b .L3766 -.L3668: - adrp x0, .LC295 - add x0, x0, :lo12:.LC295 + b .L3770 +.L3672: + adrp x0, .LC297 + add x0, x0, :lo12:.LC297 bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user - cbnz x0, .L3706 + cbnz x0, .L3710 ldr w1, [x29,56] mov w0, 21060 movk w0, 0x4b4d, lsl 16 cmp w1, w0 - bne .L3703 + bne .L3707 ldr w0, [x29,60] cmp w0, 512 - bhi .L3703 + bhi .L3707 adrp x1, .LANCHOR7 mov w2, 5161 add x1, x1, :lo12:.LANCHOR7 @@ -23231,12 +23262,12 @@ rknand_sys_storage_ioctl: mov x0, -2 ldr w3, [x1,-48] cmp w3, w2 - bne .L3660 + bne .L3664 ldr w2, [x29,68] mov x0, -3 sub w3, w2, #1 cmp w3, 127 - bhi .L3660 + bhi .L3664 ldr x19, [x1,-56] add x1, x29, 120 add x0, x19, 64 @@ -23245,38 +23276,38 @@ rknand_sys_storage_ioctl: bl memcpy mov w0, 1 mov x1, x19 - b .L3758 -.L3672: - adrp x0, .LC296 - add x0, x0, :lo12:.LC296 + b .L3762 +.L3676: + adrp x0, .LC298 + add x0, x0, :lo12:.LC298 bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user - cbnz x0, .L3706 + cbnz x0, .L3710 ldr w1, [x29,56] mov w0, 17476 movk w0, 0x4253, lsl 16 cmp w1, w0 - bne .L3703 + bne .L3707 ldr w0, [x29,60] cmp w0, 512 - bhi .L3703 + bhi .L3707 adrp x19, .LANCHOR7 add x0, x19, :lo12:.LANCHOR7 ldr w1, [x0,-44] - cbnz w1, .L3707 -.L3710: + cbnz w1, .L3711 +.L3714: mov x0, 0 - b .L3660 -.L3707: + b .L3664 +.L3711: ldr x1, [x0,-40] mov w2, 22867 movk w2, 0x4453, lsl 16 ldr w3, [x1] cmp w3, w2 - beq .L3708 + beq .L3712 mov w2, 22867 movk w2, 0x4453, lsl 16 str w2, [x1] @@ -23286,7 +23317,7 @@ rknand_sys_storage_ioctl: ldr x0, [x0,-40] str wzr, [x0,8] str wzr, [x0,12] -.L3708: +.L3712: add x20, x19, :lo12:.LANCHOR7 mov w0, 0 ldr x1, [x20,-40] @@ -23297,7 +23328,7 @@ rknand_sys_storage_ioctl: movk w1, 0x4b4d, lsl 16 ldr w2, [x0] cmp w2, w1 - beq .L3709 + beq .L3713 mov w1, 21060 movk w1, 0x4b4d, lsl 16 str w1, [x0] @@ -23306,7 +23337,7 @@ rknand_sys_storage_ioctl: str w1, [x0,4] ldr x0, [x20,-56] str wzr, [x0,8] -.L3709: +.L3713: add x19, x19, :lo12:.LANCHOR7 mov w1, 0 mov x2, 128 @@ -23319,35 +23350,35 @@ rknand_sys_storage_ioctl: bl StorageSysDataStore str wzr, [x19,-44] str wzr, [x19,-48] - b .L3757 -.L3663: - adrp x0, .LC297 - add x0, x0, :lo12:.LC297 + b .L3761 +.L3667: + adrp x0, .LC299 + add x0, x0, :lo12:.LC299 bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user - cbnz x0, .L3706 + cbnz x0, .L3710 ldr w2, [x29,56] mov w1, 20037 movk w1, 0x4253, lsl 16 cmp w2, w1 - bne .L3703 + bne .L3707 ldr w1, [x29,60] cmp w1, 512 - bhi .L3703 + bhi .L3707 adrp x19, .LANCHOR7 add x1, x19, :lo12:.LANCHOR7 ldr w2, [x1,-44] cmp w2, 1 - beq .L3710 + beq .L3714 ldr x2, [x1,-40] mov w3, 22867 movk w3, 0x4453, lsl 16 ldr w4, [x2] cmp w4, w3 - beq .L3711 + beq .L3715 mov w3, 22867 movk w3, 0x4453, lsl 16 str w3, [x2] @@ -23357,7 +23388,7 @@ rknand_sys_storage_ioctl: ldr x1, [x1,-40] str w0, [x1,8] str w0, [x1,12] -.L3711: +.L3715: add x20, x19, :lo12:.LANCHOR7 mov w0, 1 ldr x1, [x20,-40] @@ -23369,7 +23400,7 @@ rknand_sys_storage_ioctl: movk w1, 0x4b4d, lsl 16 ldr w2, [x0] cmp w2, w1 - beq .L3712 + beq .L3716 mov w1, 21060 movk w1, 0x4b4d, lsl 16 str w1, [x0] @@ -23378,7 +23409,7 @@ rknand_sys_storage_ioctl: str w1, [x0,4] ldr x0, [x20,-56] str wzr, [x0,8] -.L3712: +.L3716: add x19, x19, :lo12:.LANCHOR7 mov w1, 0 mov x2, 128 @@ -23391,66 +23422,66 @@ rknand_sys_storage_ioctl: bl StorageSysDataStore mov w0, 1 str w0, [x19,-44] - b .L3757 -.L3669: - adrp x0, .LC298 - add x0, x0, :lo12:.LC298 + b .L3761 +.L3673: + adrp x0, .LC300 + add x0, x0, :lo12:.LC300 bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user - cbnz x0, .L3706 + cbnz x0, .L3710 ldr w1, [x29,56] mov w0, 20051 movk w0, 0x4144, lsl 16 cmp w1, w0 - bne .L3703 + bne .L3707 ldr w2, [x29,60] cmp w2, 512 - bhi .L3703 + bhi .L3707 adrp x1, .LANCHOR7 add x0, x29, 64 add x1, x1, :lo12:.LANCHOR7 uxtw x2, w2 sub x1, x1, #32 - b .L3765 -.L3670: + b .L3769 +.L3674: mov w0, 27698 movk w0, 0x4004, lsl 16 cmp w19, w0 - bne .L3713 - adrp x0, .LC299 - add x0, x0, :lo12:.LC299 - b .L3755 -.L3713: + bne .L3717 + adrp x0, .LC301 + add x0, x0, :lo12:.LC301 + b .L3759 +.L3717: mov w0, 27708 movk w0, 0x4004, lsl 16 cmp w19, w0 - bne .L3715 - adrp x0, .LC300 - add x0, x0, :lo12:.LC300 - b .L3755 -.L3715: - adrp x0, .LC301 - add x0, x0, :lo12:.LC301 -.L3755: + bne .L3719 + adrp x0, .LC302 + add x0, x0, :lo12:.LC302 + b .L3759 +.L3719: + adrp x0, .LC303 + add x0, x0, :lo12:.LC303 +.L3759: bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user - cbnz x0, .L3706 + cbnz x0, .L3710 ldr w1, [x29,56] mov w0, 17227 movk w0, 0x4c4f, lsl 16 cmp w1, w0 - bne .L3760 + bne .L3764 mov w0, 27708 movk w0, 0x4004, lsl 16 cmp w19, w0 adrp x0, .LANCHOR7 - bne .L3716 + bne .L3720 add x0, x0, :lo12:.LANCHOR7 add x1, x29, 56 mov x2, 16 @@ -23460,65 +23491,65 @@ rknand_sys_storage_ioctl: strb w0, [x29,64] mov x0, x20 bl rk_copy_to_user - cbz x0, .L3660 - b .L3760 -.L3716: + cbz x0, .L3664 + b .L3764 +.L3720: add x20, x0, :lo12:.LANCHOR7 ldr w1, [x20,480] cmp w1, 10 - bhi .L3760 + bhi .L3764 ldr x1, [x20,-56] ldr w2, [x29,60] ldr w3, [x1,24] cmp w3, w2 - beq .L3717 - cbz w3, .L3717 - adrp x0, .LC302 + beq .L3721 + cbz w3, .L3721 + adrp x0, .LC304 mov w1, w2 - add x0, x0, :lo12:.LC302 + add x0, x0, :lo12:.LC304 bl printk ldr w0, [x20,480] add w0, w0, 1 str w0, [x20,480] - b .L3760 -.L3717: + b .L3764 +.L3721: add x0, x0, :lo12:.LANCHOR7 str wzr, [x0,480] mov w0, 27698 movk w0, 0x4004, lsl 16 cmp w19, w0 - bne .L3718 + bne .L3722 str wzr, [x1,20] str wzr, [x1,24] - b .L3719 -.L3718: + b .L3723 +.L3722: mov w0, 1 str w2, [x1,24] str w0, [x1,20] -.L3719: +.L3723: mov w0, 1 mov x19, -2 bl StorageSysDataStore cmn w0, #1 - bne .L3757 - b .L3687 -.L3682: - adrp x0, .LC303 - add x0, x0, :lo12:.LC303 + bne .L3761 + b .L3691 +.L3686: + adrp x0, .LC305 + add x0, x0, :lo12:.LC305 bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user - cbnz x0, .L3706 + cbnz x0, .L3710 ldr w1, [x29,56] mov w0, 17750 movk w0, 0x444e, lsl 16 cmp w1, w0 - bne .L3703 + bne .L3707 ldr w2, [x29,60] cmp w2, 504 - bhi .L3703 + bhi .L3707 mov w0, 30224 adrp x1, .LANCHOR7 movk w0, 0x4004, lsl 16 @@ -23526,72 +23557,72 @@ rknand_sys_storage_ioctl: cmp w19, w0 add x1, x1, :lo12:.LANCHOR7 add x0, x29, 64 - bne .L3720 + bne .L3724 ldr x1, [x1,488] - b .L3756 -.L3720: + b .L3760 +.L3724: ldr x1, [x1,496] -.L3756: +.L3760: add x1, x1, 8 -.L3765: +.L3769: bl memcpy -.L3766: +.L3770: mov x0, x20 add x1, x29, 56 mov x2, 520 - b .L3752 -.L3679: - adrp x0, .LC304 - add x0, x0, :lo12:.LC304 + b .L3756 +.L3683: + adrp x0, .LC306 + add x0, x0, :lo12:.LC306 bl printk add x0, x29, 56 mov x1, x20 mov x2, 520 bl rk_copy_from_user - cbnz x0, .L3706 + cbnz x0, .L3710 ldr w1, [x29,56] mov w0, 17750 movk w0, 0x444e, lsl 16 cmp w1, w0 - bne .L3703 + bne .L3707 ldr w2, [x29,60] cmp w2, 504 - bhi .L3703 + bhi .L3707 mov w0, 30225 add w2, w2, 8 movk w0, 0x4004, lsl 16 cmp w19, w0 adrp x19, .LANCHOR7 add x19, x19, :lo12:.LANCHOR7 - bne .L3722 + bne .L3726 ldr x0, [x19,488] add x1, x29, 56 bl memcpy mov w0, 2 ldr x1, [x19,488] - b .L3758 -.L3722: + b .L3762 +.L3726: ldr x0, [x19,496] add x1, x29, 56 bl memcpy ldr x1, [x19,496] mov w0, 3 -.L3758: +.L3762: bl StorageSysDataStore uxtw x19, w0 - b .L3687 -.L3757: + b .L3691 +.L3761: mov x19, 0 -.L3687: - adrp x0, .LC305 +.L3691: + adrp x0, .LC307 mov x1, x19 - add x0, x0, :lo12:.LC305 + add x0, x0, :lo12:.LC307 bl printk mov x0, x19 - b .L3660 -.L3723: + b .L3664 +.L3727: mov x0, -22 -.L3660: +.L3664: ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] ldp x29, x30, [sp], 48 @@ -23626,25 +23657,25 @@ rk_ftl_storage_sys_init: ldr w0, [x21,16] ldr w22, [x21,508] str w0, [x19,-44] - cbz w22, .L3772 + cbz w22, .L3776 mov x0, x21 mov w1, 508 bl js_hash cmp w22, w0 - beq .L3772 - adrp x0, .LC306 + beq .L3776 + adrp x0, .LC308 str wzr, [x21,16] - add x0, x0, :lo12:.LC306 + add x0, x0, :lo12:.LC308 str wzr, [x19,-44] bl printk -.L3772: +.L3776: add x0, x20, :lo12:.LANCHOR7 ldr w1, [x0,-44] - cbz w1, .L3773 + cbz w1, .L3777 mov w1, 5161 movk w1, 0xc059, lsl 16 str w1, [x0,-48] -.L3773: +.L3777: add x20, x20, :lo12:.LANCHOR7 mov w0, 2 ldr x1, [x20,488] @@ -23680,19 +23711,19 @@ rk_ftl_vendor_storage_init: add x1, x21, :lo12:.LANCHOR7 mov w19, -12 str x0, [x1,504] - cbz x0, .L3782 + cbz x0, .L3786 mov w23, 0 - adrp x24, .LC307 + adrp x24, .LC309 mov w19, w23 mov w22, w23 - add x24, x24, :lo12:.LC307 -.L3786: + add x24, x24, :lo12:.LC309 +.L3790: add x20, x21, :lo12:.LANCHOR7 lsl w0, w22, 7 mov w1, 128 ldr x2, [x20,504] bl FlashBootVendorRead - cbnz w0, .L3783 + cbnz w0, .L3787 ldr x3, [x20,504] mov x0, x24 add x2, x3, 61440 @@ -23705,29 +23736,29 @@ rk_ftl_vendor_storage_init: movk w0, 0x524b, lsl 16 ldr w1, [x20] cmp w1, w0 - bne .L3784 + bne .L3788 ldr w0, [x20,4] cmp w19, w0 - bcs .L3784 + bcs .L3788 add x1, x20, 61440 ldr w1, [x1,4092] cmp w1, w0 csel w23, w23, w22, ne csel w19, w19, w0, ne -.L3784: - cbnz w22, .L3794 +.L3788: + cbnz w22, .L3798 mov w22, 1 - b .L3786 -.L3794: - cbz w19, .L3787 + b .L3790 +.L3798: + cbz w19, .L3791 lsl w0, w23, 7 mov w1, 128 mov x2, x20 bl FlashBootVendorRead mov w19, w0 - cbz w0, .L3782 - b .L3783 -.L3787: + cbz w0, .L3786 + b .L3787 +.L3791: mov x0, x20 mov w1, w19 mov x2, 65536 @@ -23741,14 +23772,14 @@ rk_ftl_vendor_storage_init: mov w0, -1032 strh w19, [x20,12] strh w0, [x20,14] - b .L3782 -.L3783: + b .L3786 +.L3787: add x21, x21, :lo12:.LANCHOR7 mov w19, -1 ldr x0, [x21,504] bl kfree str xzr, [x21,504] -.L3782: +.L3786: mov w0, w19 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -23766,18 +23797,18 @@ rk_ftl_vendor_read: ldr x5, [x3,#:lo12:.LANCHOR7+504] mov w3, -1 str x19, [sp,16] - cbz x5, .L3796 + cbz x5, .L3800 ldrh w3, [x5,10] mov x4, 0 -.L3797: +.L3801: cmp w4, w3 mov w6, w4 - bcs .L3801 + bcs .L3805 add x7, x5, x4, lsl 3 add x4, x4, 1 ldrh w7, [x7,16] cmp w7, w0 - bne .L3797 + bne .L3801 add x6, x5, x6, uxtw 3 ldrh w4, [x6,20] mov x0, x1 @@ -23789,10 +23820,10 @@ rk_ftl_vendor_read: uxtw x2, w19 bl memcpy mov w3, w19 - b .L3796 -.L3801: + b .L3800 +.L3805: mov w3, -1 -.L3796: +.L3800: mov w0, w3 ldr x19, [sp,16] ldp x29, x30, [sp], 32 @@ -23815,38 +23846,38 @@ rk_ftl_vendor_write: mov w26, w2 mov x28, x1 mov w2, -1 - cbz x19, .L3803 + cbz x19, .L3807 add w20, w26, 63 ldrh w3, [x19,10] ldrh w23, [x19,8] and w20, w20, -64 mov x2, 0 -.L3804: +.L3808: cmp w2, w3 mov w4, w2 - bcs .L3819 + bcs .L3823 add x0, x19, x2, lsl 3 add x2, x2, 1 ldrh w0, [x0,16] cmp w0, w6 - bne .L3804 + bne .L3808 add x21, x19, x4, uxtw 3 ldrh w24, [x21,20] add x5, x19, 1024 add w24, w24, 63 and w24, w24, -64 cmp w26, w24 - bls .L3805 + bls .L3809 ldrh w0, [x19,14] mov w2, -1 cmp w0, w20 - bcc .L3803 + bcc .L3807 ldrh w21, [x21,18] add w22, w3, w2 -.L3806: +.L3810: cmp w4, w22 uxtw x3, w4 - bcs .L3820 + bcs .L3824 add x3, x19, x3, lsl 3 add w25, w4, 1 add x1, x19, x25, uxtw 3 @@ -23869,8 +23900,8 @@ rk_ftl_vendor_write: mov w4, w25 ldr x6, [x29,96] ldr x5, [x29,104] - b .L3806 -.L3820: + b .L3810 +.L3824: add x3, x19, x3, lsl 3 uxth w21, w21 mov x1, x28 @@ -23887,20 +23918,20 @@ rk_ftl_vendor_write: add w24, w24, w0 sub w24, w24, w20 strh w24, [x19,14] - b .L3818 -.L3805: + b .L3822 +.L3809: ldrh w0, [x21,18] mov x1, x28 uxtw x2, w26 add x0, x5, x0 bl memcpy strh w26, [x21,20] - b .L3818 -.L3819: + b .L3822 +.L3823: ldrh w4, [x19,14] mov w2, -1 cmp w4, w20 - bcc .L3803 + bcc .L3807 add x3, x19, x3, uxth 3 strh w6, [x3,16] uxth w20, w20 @@ -23920,7 +23951,7 @@ rk_ftl_vendor_write: ldrh w0, [x19,10] add w0, w0, 1 strh w0, [x19,10] -.L3818: +.L3822: ldr w0, [x19,4] add x1, x19, 61440 mov x2, x19 @@ -23937,7 +23968,7 @@ rk_ftl_vendor_write: lsl w0, w23, 7 bl FlashBootVendorWrite mov w2, 0 -.L3803: +.L3807: mov w0, w2 ldp x19, x20, [sp,16] ldp x21, x22, [sp,32] @@ -23961,37 +23992,37 @@ rk_ftl_vendor_storage_ioctl: mov x21, x2 bl ftl_malloc mov x19, x0 - cbz x0, .L3822 + cbz x0, .L3826 mov w2, 30209 ldr x1, [x29,56] movk w2, 0x4004, lsl 16 cmp w1, w2 - beq .L3824 + beq .L3828 mov w2, 30210 movk w2, 0x4004, lsl 16 cmp w1, w2 - beq .L3825 - b .L3836 -.L3824: + beq .L3829 + b .L3840 +.L3828: mov x1, x21 mov x2, 8 bl rk_copy_from_user - cbnz x0, .L3836 + cbnz x0, .L3840 ldr w1, [x19] mov w0, 17745 movk w0, 0x5652, lsl 16 cmp w1, w0 - beq .L3827 -.L3828: + beq .L3831 +.L3832: mov x20, -1 - b .L3823 -.L3827: + b .L3827 +.L3831: ldrh w0, [x19,4] add x1, x19, 8 ldrh w2, [x19,6] bl rk_ftl_vendor_read cmn w0, #1 - beq .L3828 + beq .L3832 uxth x2, w0 strh w0, [x19,6] mov x1, x19 @@ -24001,38 +24032,38 @@ rk_ftl_vendor_storage_ioctl: bl rk_copy_to_user cmp x0, xzr csel x20, xzr, x20, eq - b .L3823 -.L3825: + b .L3827 +.L3829: mov x1, x21 mov x2, 8 bl rk_copy_from_user - cbnz x0, .L3836 + cbnz x0, .L3840 ldr w1, [x19] mov w0, 17745 movk w0, 0x5652, lsl 16 cmp w1, w0 - bne .L3828 + bne .L3832 ldrh w3, [x19,6] cmp w3, 4087 - bhi .L3828 + bhi .L3832 add w2, w3, 8 mov x0, x19 mov x1, x21 sxtw x2, w2 bl rk_copy_from_user - cbnz x0, .L3836 + cbnz x0, .L3840 ldrh w0, [x19,4] add x1, x19, 8 ldrh w2, [x19,6] bl rk_ftl_vendor_write sxtw x20, w0 - b .L3823 -.L3836: + b .L3827 +.L3840: mov x20, -14 -.L3823: +.L3827: mov x0, x19 bl kfree -.L3822: +.L3826: mov x0, x20 ldr x21, [sp,32] ldp x19, x20, [sp,16] @@ -25105,11 +25136,6 @@ __func__.34426: __func__.34506: .string "sblk_read_page" .zero 1 - .type __func__.33493, %object - .size __func__.33493, 21 -__func__.33493: - .string "gc_check_data_one_wl" - .zero 3 .type __func__.18539, %object .size __func__.18539, 26 __func__.18539: @@ -25211,6 +25237,11 @@ __func__.34129: __func__.33331: .string "zftl_read" .zero 6 + .type __func__.33493, %object + .size __func__.33493, 21 +__func__.33493: + .string "gc_check_data_one_wl" + .zero 3 .type __func__.34219, %object .size __func__.34219, 19 __func__.34219: @@ -25240,7 +25271,7 @@ __func__.33362: .LC1: .string "%s\n" .LC2: - .string "FTL version: 6.0.8 20180615" + .string "FTL version: 6.0.9 20180704" .LC3: .string "zftl_debug:0x%x\n" .LC4: @@ -25558,298 +25589,302 @@ __func__.33362: .LC160: .string "set buf %d,status = %x, ppa = %x lun state = %d\n" .LC161: - .string "1ppa = %x, status = %x, %x %x spare: %x %x %x %x\n" -.LC162: .string "flash_prog_page %x %x %x\n" -.LC163: +.LC162: .string "flash_prog_page page_addr = %x status = %x\n" -.LC164: +.LC163: .string "sblk_prog_page ppa = %x, count = %d\n" -.LC165: +.LC164: .string "flash_prog_page_en:%x %x\n" -.LC166: +.LC165: .string "spare" -.LC167: +.LC166: .string "data" -.LC168: +.LC167: .string "write error: %x\n" -.LC169: +.LC168: .string "g_ftl_info_blk blk = %x, page = %x version = %d\n" -.LC170: +.LC169: .string "%d %x @%d %x\n" -.LC171: +.LC170: .string "ftl_info_blk_init %d %d %x\n" -.LC172: +.LC171: .string "%s %d %d %x %x\n" -.LC173: +.LC172: .string "saved_active_page = %x\n" -.LC174: +.LC173: .string "saved_active_plane = %x\n" -.LC175: +.LC174: .string "sblk = %x\n" -.LC176: +.LC175: .string "phy_blk = %x %x\n" -.LC177: +.LC176: .string "sblk = %x, vpn0 = %d, vpn1 = %d\n" -.LC178: +.LC177: .string "dump write = %x\n" -.LC179: +.LC178: .string "pm_write_page write error: %x\n" -.LC180: +.LC179: .string "finfo:" -.LC181: +.LC180: .string "flash_info_flush id = %x, page = %x\n" -.LC182: +.LC181: .string "sys_info_flush error:%x\n" -.LC183: +.LC182: .string "blk= %x, page=%x, ppa = %x, status = %x, data:%x %x %x %x, spare: %x %x %x %x\n" -.LC184: +.LC183: .string "l2p:" -.LC185: +.LC184: .string "free_buf_count: %d\n" -.LC186: +.LC185: .string "g_ftl_info_blk blk:0x%x, index:0x%x, page:0x%x\n" -.LC187: +.LC186: .string "ftl_ext_info_blk blk:0x%x, page:0x%x\n" -.LC188: +.LC187: .string "ac_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" -.LC189: +.LC188: .string "tmp_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" -.LC190: +.LC189: .string "gc_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" -.LC191: +.LC190: .string "lpa:" -.LC192: +.LC191: .string "vpn:" -.LC193: +.LC192: .string "sblk:" -.LC194: +.LC193: .string "lpa_hash:" -.LC195: +.LC194: .string "lpa_hash_index:" -.LC196: +.LC195: .string "%s w error lpn = %x, max ppa = %d\n" -.LC197: +.LC196: .string "region_id = %d, pm_max_region = %d\n" -.LC198: +.LC197: .string "load_l2p_region no ppa = %x , %x, all setting 0xff....\n" -.LC199: +.LC198: .string "load_l2p_region = %x,%x,%x, %x\n" -.LC200: +.LC199: .string "pm_ppa:" -.LC201: +.LC200: .string "data:" -.LC202: +.LC201: .string "spare:" -.LC203: +.LC202: .string "pm_init posr %x %x %x\n" -.LC204: +.LC203: .string "pm_init recovery %x %x %x\n" -.LC205: +.LC204: .string "pm_log2phys lpn = %d, max lpn = %d\n" -.LC206: +.LC205: .string "ppa = %x, status = %x, data:%x %x %x %x, spare: %x %x %x %x\n" -.LC207: +.LC206: .string "ppa = %x, status = %x, %x %x spare: %x %x %x %x\n" -.LC208: +.LC207: .string "gc_recovery: %x vpn = %x\n" -.LC209: +.LC208: .string "_c_user_data_density := %d\n" -.LC210: +.LC209: .string "_c_totle_phy_density := %d\n" -.LC211: +.LC210: .string "_c_totle_log_page := %d\n" -.LC212: +.LC211: .string "_c_totle_data_density := %d\n" -.LC213: +.LC212: .string "_c_ftl_pm_page_num := %d\n" -.LC214: +.LC213: .string "_c_ftl_byte_pre_page := %d\n" -.LC215: +.LC214: .string "_c_max_pm_sblk := %d\n" -.LC216: +.LC215: .string "_min_slc_super_block := %d\n" -.LC217: +.LC216: .string "_max_xlc_super_block := %d\n" -.LC218: +.LC217: .string "gp_ftl_ext_info %p %p %p\n" -.LC219: +.LC218: .string "flash info size: %d %d %d\n" -.LC220: +.LC219: .string "ftl_init %x\n" -.LC221: +.LC220: .string "gc_update_l2p_map_new sblk %x\n" -.LC222: +.LC221: .string "gc_update_l2p_map_new: %x %x %x\n" -.LC223: +.LC222: .string "lpa: %x %x %x\n" -.LC224: +.LC223: .string "gc_update_l2p_map_new: %x vpn = %x vpn1 = %x done\n" -.LC225: +.LC224: .string "gc_scan_src_blk = %x, vpn = %d\n" -.LC226: +.LC225: .string "gc_scan_src_blk = %x, s vpn0 = %d, c vpn1 = %d\n" -.LC227: +.LC226: .string "gc_block_vpn_scan = %x, s vpn0 = %d, c vpn1 = %d f:%d\n" -.LC228: +.LC227: .string "ftl_sblk_dump = %x %d %d %d %d\n" -.LC229: +.LC228: .string "ftl_sblk_dump = %x %x %x %x\n" -.LC230: +.LC229: .string "page_addr = %x, lpa=%x vpn = %d\n" -.LC231: +.LC230: .string "index= %x, lpa=%x\n" -.LC232: +.LC231: .string "block = %x, vpn=%x check vpn = %d\n" -.LC233: +.LC232: .string "ftl_read %x %x %x\n" -.LC234: +.LC233: .string "ftl_read refresh =%x, lpa = %x, ppa= %x\n" -.LC235: +.LC234: .string "id=%d, lpa = %x, ppa = %x spare = %x %x %x %x\n" -.LC236: +.LC235: .string "zftl debug cmd: %s\n" -.LC237: +.LC236: .string "cmd:" -.LC238: +.LC237: .string "dumpl2p" -.LC239: +.LC238: .string "pm l2p:" -.LC240: +.LC239: .string "pm blk:" -.LC241: +.LC240: .string "dumppm:" -.LC242: +.LC241: .string "p_cmd: %s\n" -.LC243: +.LC242: .string "pm ram = %x, %x\n" -.LC244: +.LC243: .string "ram:" -.LC245: +.LC244: .string "pm:" -.LC246: +.LC245: .string "dumpsys" -.LC247: +.LC246: .string "dumplist:" -.LC248: +.LC247: .string "vpncheck" -.LC249: +.LC248: .string "dumpppa:" -.LC250: +.LC249: .string "dumpblk:" -.LC251: +.LC250: .string "setzdebug:" -.LC252: +.LC251: .string "lpa2ppa:" -.LC253: +.LC252: .string "lpa: %x--> ppa: %x\n" -.LC254: +.LC253: .string "help:\n" -.LC255: +.LC254: .string "1. echo dumpl2p > /proc/zftl_debug\n" -.LC256: +.LC255: .string "2. echo dumppm:x > /proc/zftl_debug\n" -.LC257: +.LC256: .string "3. echo dumpsys > /proc/zftl_debug\n" -.LC258: +.LC257: .string "4. echo dumpppa:x > /proc/zftl_debug\n" -.LC259: +.LC258: .string "5. echo vpncheck > /proc/zftl_debug\n" -.LC260: +.LC259: .string "6. echo setzdebug:x > /proc/zftl_debug\n" -.LC261: +.LC260: .string "7. echo dumplist > /proc/zftl_debug\n" -.LC262: +.LC261: .string "8. echo lpa2ppa:x> /proc/zftl_debug\n" +.LC262: + .string "gc_lpa:" .LC263: - .string "ftl_update_l2p_map: %x %x %x\n" + .string "gc_ppa:" .LC264: - .string "ftl_update_l2p_map" + .string "err: ppa = %x, status = %x, %x %x spare: %x %x %x %x\n" .LC265: - .string "lpa_tbl:" + .string "ftl_update_l2p_map: %x %x %x\n" .LC266: - .string "sblk %x vpn: %d %d\n" + .string "ftl_update_l2p_map" .LC267: - .string "%d read error: ppa:%x, lpa:%x, status:%x\n" + .string "lpa_tbl:" .LC268: - .string "gc page in buf: lpa %x ppa = %x pageindex= %x\n" + .string "sblk %x vpn: %d %d\n" .LC269: - .string "gc_do_copy_back: lpa %x des_ppa = %x %x gc_ppa= %x page_index= %d\n" + .string "%d read error: ppa:%x, lpa:%x, status:%x\n" .LC270: - .string "gc_do_copy_back: %x %x %x %x gc_ppa:%x %x\n" + .string "gc page in buf: lpa %x ppa = %x pageindex= %x\n" .LC271: - .string "%d prog_step: %x %x buf id= %x ppa = %x hash=%x id = %x plane = %x lpa=%x\n" + .string "gc_do_copy_back: lpa %x des_ppa = %x %x gc_ppa= %x page_index= %d\n" .LC272: - .string "gc %d: %d %d %d %d %d %d %d\n" + .string "gc_do_copy_back: %x %x %x %x gc_ppa:%x %x\n" .LC273: - .string "gc %d: %d %d %d %d %d %d\n" + .string "%d prog_step: %x %x buf id= %x ppa = %x hash=%x id = %x plane = %x lpa=%x\n" .LC274: - .string "GC_STATE_SCAN_ALL_PAGE = %x, vpn0 = %d, vpn1 = %d\n" + .string "gc %d: %d %d %d %d %d %d %d\n" .LC275: - .string "gc free %x, %d\n" + .string "gc %d: %d %d %d %d %d %d\n" .LC276: - .string "ftlwrite %x %x %x\n" + .string "GC_STATE_SCAN_ALL_PAGE = %x, vpn0 = %d, vpn1 = %d\n" .LC277: - .string "ftl_discard:(%x, %x, %x, %x)\n" + .string "gc free %x, %d\n" .LC278: - .string "id_block_prog_msb_ff_data slc page = %d pageadd=%x %x\n" + .string "ftlwrite %x %x %x\n" .LC279: - .string "write_idblock fix data %x %x\n" + .string "ftl_discard:(%x, %x, %x, %x)\n" .LC280: - .string "idblk:" + .string "id_block_prog_msb_ff_data slc page = %d pageadd=%x %x\n" .LC281: - .string "write_idblock totle_sec %x %x\n" + .string "write_idblock fix data %x %x\n" .LC282: - .string "READ_SECTOR_IO\n" + .string "idblk:" .LC283: - .string "rk_copy_from_user error\n" + .string "write_idblock totle_sec %x %x\n" .LC284: - .string "READ_SECTOR_IO %x %x\n" + .string "READ_SECTOR_IO\n" .LC285: - .string "rk_copy_to_user error\n" + .string "rk_copy_from_user error\n" .LC286: - .string "WRITE_SECTOR_IO\n" + .string "READ_SECTOR_IO %x %x\n" .LC287: - .string "WRITE_SECTOR_IO %x %x\n" + .string "rk_copy_to_user error\n" .LC288: - .string "END_WRITE_SECTOR_IO\n" + .string "WRITE_SECTOR_IO\n" .LC289: - .string "END_WRITE_SECTOR_IO %x %x\n" + .string "WRITE_SECTOR_IO %x %x\n" .LC290: - .string "GET_FLASH_INFO_IO\n" + .string "END_WRITE_SECTOR_IO\n" .LC291: - .string "GET_BAD_BLOCK_IO\n" + .string "END_WRITE_SECTOR_IO %x %x\n" .LC292: - .string "GET_LOCK_FLAG_IO\n" + .string "GET_FLASH_INFO_IO\n" .LC293: - .string "GET_PUBLIC_KEY_IO\n" + .string "GET_BAD_BLOCK_IO\n" .LC294: - .string "RKNAND_GET_DRM_KEY\n" + .string "GET_LOCK_FLAG_IO\n" .LC295: - .string "RKNAND_STORE_DRM_KEY\n" + .string "GET_PUBLIC_KEY_IO\n" .LC296: - .string "RKNAND_DIASBLE_SECURE_BOOT\n" + .string "RKNAND_GET_DRM_KEY\n" .LC297: - .string "RKNAND_ENASBLE_SECURE_BOOT\n" + .string "RKNAND_STORE_DRM_KEY\n" .LC298: - .string "RKNAND_GET_SN_SECTOR\n" + .string "RKNAND_DIASBLE_SECURE_BOOT\n" .LC299: - .string "RKNAND_LOADER_UNLOCK\n" + .string "RKNAND_ENASBLE_SECURE_BOOT\n" .LC300: - .string "RKNAND_LOADER_STATUS\n" + .string "RKNAND_GET_SN_SECTOR\n" .LC301: - .string "RKNAND_LOADER_LOCK\n" + .string "RKNAND_LOADER_UNLOCK\n" .LC302: - .string "LockKey not match %d\n" + .string "RKNAND_LOADER_STATUS\n" .LC303: - .string "RKNAND_GET_VENDOR_SECTOR\n" + .string "RKNAND_LOADER_LOCK\n" .LC304: - .string "RKNAND_STORE_VENDOR_SECTOR\n" + .string "LockKey not match %d\n" .LC305: - .string "return ret = %lx\n" + .string "RKNAND_GET_VENDOR_SECTOR\n" .LC306: - .string "secureBootEn check error\n" + .string "RKNAND_STORE_VENDOR_SECTOR\n" .LC307: + .string "return ret = %lx\n" +.LC308: + .string "secureBootEn check error\n" +.LC309: .string "\0013vendor storage %x,%x,%x\n" .data .align 3 From 2bba0563a82108b3fe91104ee82b8df2a5e3b73f Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Mon, 2 Jul 2018 17:12:25 +0800 Subject: [PATCH 0085/1852] drm/rockchip: add support mcu init screen the mcu init cmd should be sent from crtc mcu interface, so we add the rockchip_drm_crtc_send_mcu_cmd to do this. Change-Id: I7fedfb90c6074e8837a825d10e0dcd9c16bfc1d0 Signed-off-by: Sandy Huang --- drivers/gpu/drm/panel/panel-simple.c | 64 ++++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 26 +++++++ drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 + drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 84 +++++++++++++++++++++ include/drm/drm_panel.h | 3 + 5 files changed, 178 insertions(+) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 9a2be6f20e46b..ce93af189b050 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -37,6 +37,7 @@ #include