diff options
author | Jonas Gorski <jogo@openwrt.org> | 2015-08-14 13:06:33 +0000 |
---|---|---|
committer | Jonas Gorski <jogo@openwrt.org> | 2015-08-14 13:06:33 +0000 |
commit | 6be2305da83471c442dab83366c25be4dfb38793 (patch) | |
tree | 30cfe6f3fc964dca1936646468c87367b509e929 /target/linux/sunxi | |
parent | 8e69c9f7ef2e1ca40b33a4a33c76b460c1f62861 (diff) | |
download | mtk-20170518-6be2305da83471c442dab83366c25be4dfb38793.zip mtk-20170518-6be2305da83471c442dab83366c25be4dfb38793.tar.gz mtk-20170518-6be2305da83471c442dab83366c25be4dfb38793.tar.bz2 |
kernel: update 4.1 to 4.1.5
Changelog:
* https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.5
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
SVN-Revision: 46598
Diffstat (limited to 'target/linux/sunxi')
64 files changed, 309 insertions, 556 deletions
diff --git a/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch b/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch index 33058fa..c93adeb 100644 --- a/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch +++ b/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch @@ -28,8 +28,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org> include/linux/mfd/axp20x.h | 86 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) -diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c -index d18029b..cfbb7d7 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -32,6 +32,7 @@ @@ -40,7 +38,7 @@ index d18029b..cfbb7d7 100644 "AXP288", }; -@@ -54,6 +55,25 @@ static const struct regmap_access_table axp20x_volatile_table = { +@@ -54,6 +55,25 @@ static const struct regmap_access_table .n_yes_ranges = ARRAY_SIZE(axp20x_volatile_ranges), }; @@ -66,7 +64,7 @@ index d18029b..cfbb7d7 100644 static const struct regmap_range axp288_writeable_ranges[] = { regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ6_STATE), regmap_reg_range(AXP20X_DCDC_MODE, AXP288_FG_TUNE5), -@@ -87,6 +107,20 @@ static struct resource axp20x_pek_resources[] = { +@@ -87,6 +107,20 @@ static struct resource axp20x_pek_resour }, }; @@ -87,7 +85,7 @@ index d18029b..cfbb7d7 100644 static struct resource axp288_fuel_gauge_resources[] = { { .start = AXP288_IRQ_QWBTU, -@@ -129,6 +163,15 @@ static const struct regmap_config axp20x_regmap_config = { +@@ -129,6 +163,15 @@ static const struct regmap_config axp20x .cache_type = REGCACHE_RBTREE, }; @@ -103,7 +101,7 @@ index d18029b..cfbb7d7 100644 static const struct regmap_config axp288_regmap_config = { .reg_bits = 8, .val_bits = 8, -@@ -181,6 +224,34 @@ static const struct regmap_irq axp20x_regmap_irqs[] = { +@@ -181,6 +224,34 @@ static const struct regmap_irq axp20x_re INIT_REGMAP_IRQ(AXP20X, GPIO0_INPUT, 4, 0), }; @@ -138,7 +136,7 @@ index d18029b..cfbb7d7 100644 /* some IRQs are compatible with axp20x models */ static const struct regmap_irq axp288_regmap_irqs[] = { INIT_REGMAP_IRQ(AXP288, VBUS_FALL, 0, 2), -@@ -224,6 +295,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = { +@@ -224,6 +295,7 @@ static const struct regmap_irq axp288_re static const struct of_device_id axp20x_of_match[] = { { .compatible = "x-powers,axp202", .data = (void *) AXP202_ID }, { .compatible = "x-powers,axp209", .data = (void *) AXP209_ID }, @@ -146,7 +144,7 @@ index d18029b..cfbb7d7 100644 { }, }; MODULE_DEVICE_TABLE(of, axp20x_of_match); -@@ -258,6 +330,18 @@ static const struct regmap_irq_chip axp20x_regmap_irq_chip = { +@@ -258,6 +330,18 @@ static const struct regmap_irq_chip axp2 }; @@ -165,7 +163,7 @@ index d18029b..cfbb7d7 100644 static const struct regmap_irq_chip axp288_regmap_irq_chip = { .name = "axp288_irq_chip", .status_base = AXP20X_IRQ1_STATE, -@@ -281,6 +365,14 @@ static struct mfd_cell axp20x_cells[] = { +@@ -281,6 +365,14 @@ static struct mfd_cell axp20x_cells[] = }, }; @@ -180,7 +178,7 @@ index d18029b..cfbb7d7 100644 static struct resource axp288_adc_resources[] = { { .name = "GPADC", -@@ -426,6 +518,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev) +@@ -426,6 +518,12 @@ static int axp20x_match_device(struct ax axp20x->regmap_cfg = &axp20x_regmap_config; axp20x->regmap_irq_chip = &axp20x_regmap_irq_chip; break; @@ -193,8 +191,6 @@ index d18029b..cfbb7d7 100644 case AXP288_ID: axp20x->cells = axp288_cells; axp20x->nr_cells = ARRAY_SIZE(axp288_cells); -diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h -index dfabd6d..95568eb 100644 --- a/include/linux/mfd/axp20x.h +++ b/include/linux/mfd/axp20x.h @@ -14,6 +14,7 @@ diff --git a/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch b/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch index b49c969..21fe2ec 100644 --- a/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch +++ b/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch @@ -16,8 +16,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org> drivers/regulator/axp20x-regulator.c | 143 +++++++++++++++++++++++------------ 1 file changed, 94 insertions(+), 49 deletions(-) -diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c -index e4331f5..50ae0b5 100644 --- a/drivers/regulator/axp20x-regulator.c +++ b/drivers/regulator/axp20x-regulator.c @@ -32,15 +32,15 @@ @@ -97,7 +95,7 @@ index e4331f5..50ae0b5 100644 .n_voltages = ARRAY_SIZE(_table), \ .owner = THIS_MODULE, \ .vsel_reg = (_vreg), \ -@@ -136,37 +136,57 @@ static struct regulator_ops axp20x_ops = { +@@ -136,37 +136,57 @@ static struct regulator_ops axp20x_ops = }; static const struct regulator_desc axp20x_regulators[] = { @@ -135,7 +133,10 @@ index e4331f5..50ae0b5 100644 { struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent); + u32 min, max, def, step; -+ + +- if (dcdcfreq < 750) { +- dcdcfreq = 750; +- dev_warn(&pdev->dev, "DCDC frequency too low. Set to 750kHz\n"); + switch (axp20x->variant) { + case AXP202_ID: + case AXP209_ID: @@ -148,35 +149,32 @@ index e4331f5..50ae0b5 100644 + dev_err(&pdev->dev, + "Setting DCDC frequency for unsupported AXP variant\n"); + return -EINVAL; -+ } -+ + } + +- if (dcdcfreq > 1875) { +- dcdcfreq = 1875; +- dev_warn(&pdev->dev, "DCDC frequency too high. Set to 1875kHz\n"); + if (dcdcfreq == 0) + dcdcfreq = def; - -- if (dcdcfreq < 750) { -- dcdcfreq = 750; -- dev_warn(&pdev->dev, "DCDC frequency too low. Set to 750kHz\n"); ++ + if (dcdcfreq < min) { + dcdcfreq = min; + dev_warn(&pdev->dev, "DCDC frequency too low. Set to %ukHz\n", + min); } -- if (dcdcfreq > 1875) { -- dcdcfreq = 1875; -- dev_warn(&pdev->dev, "DCDC frequency too high. Set to 1875kHz\n"); +- dcdcfreq = (dcdcfreq - 750) / 75; + if (dcdcfreq > max) { + dcdcfreq = max; + dev_warn(&pdev->dev, "DCDC frequency too high. Set to %ukHz\n", + max); - } - -- dcdcfreq = (dcdcfreq - 750) / 75; ++ } ++ + dcdcfreq = (dcdcfreq - min) / step; return regmap_update_bits(axp20x->regmap, AXP20X_DCDC_FREQ, AXP20X_FREQ_DCDC_MASK, dcdcfreq); -@@ -176,7 +196,7 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev) +@@ -176,7 +196,7 @@ static int axp20x_regulator_parse_dt(str { struct device_node *np, *regulators; int ret; @@ -185,7 +183,7 @@ index e4331f5..50ae0b5 100644 np = of_node_get(pdev->dev.parent->of_node); if (!np) -@@ -186,7 +206,6 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev) +@@ -186,7 +206,6 @@ static int axp20x_regulator_parse_dt(str if (!regulators) { dev_warn(&pdev->dev, "regulators node not found\n"); } else { @@ -193,7 +191,7 @@ index e4331f5..50ae0b5 100644 of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq); ret = axp20x_set_dcdc_freq(pdev, dcdcfreq); if (ret < 0) { -@@ -202,15 +221,27 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev) +@@ -202,15 +221,27 @@ static int axp20x_regulator_parse_dt(str static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 workmode) { @@ -202,7 +200,6 @@ index e4331f5..50ae0b5 100644 + unsigned int mask; - if ((id != AXP20X_DCDC2) && (id != AXP20X_DCDC3)) -- return -EINVAL; + switch (axp20x->variant) { + case AXP202_ID: + case AXP209_ID: @@ -212,22 +209,24 @@ index e4331f5..50ae0b5 100644 + mask = AXP20X_WORKMODE_DCDC2_MASK; + if (id == AXP20X_DCDC3) + mask = AXP20X_WORKMODE_DCDC3_MASK; - -- if (id == AXP20X_DCDC3) -- mask = AXP20X_WORKMODE_DCDC3_MASK; ++ + workmode <<= ffs(mask) - 1; + break; - -- workmode <<= ffs(mask) - 1; ++ + default: + /* should not happen */ + WARN_ON(1); -+ return -EINVAL; + return -EINVAL; +- +- if (id == AXP20X_DCDC3) +- mask = AXP20X_WORKMODE_DCDC3_MASK; +- +- workmode <<= ffs(mask) - 1; + } return regmap_update_bits(rdev->regmap, AXP20X_DCDC_MODE, mask, workmode); } -@@ -219,22 +250,36 @@ static int axp20x_regulator_probe(struct platform_device *pdev) +@@ -219,22 +250,36 @@ static int axp20x_regulator_probe(struct { struct regulator_dev *rdev; struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent); @@ -268,7 +267,7 @@ index e4331f5..50ae0b5 100644 return PTR_ERR(rdev); } -@@ -245,7 +290,7 @@ static int axp20x_regulator_probe(struct platform_device *pdev) +@@ -245,7 +290,7 @@ static int axp20x_regulator_probe(struct if (!ret) { if (axp20x_set_dcdc_workmode(rdev, i, workmode)) dev_err(&pdev->dev, "Failed to set workmode on %s\n", diff --git a/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch b/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch index b2fdb65..cc5bc4f 100644 --- a/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch +++ b/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch @@ -19,8 +19,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org> drivers/regulator/axp20x-regulator.c | 96 ++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) -diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c -index 50ae0b5..6468291 100644 --- a/drivers/regulator/axp20x-regulator.c +++ b/drivers/regulator/axp20x-regulator.c @@ -27,8 +27,12 @@ @@ -63,7 +61,7 @@ index 50ae0b5..6468291 100644 #define AXP_DESC_FIXED(_family, _id, _match, _supply, _volt) \ [_family##_##_id] = { \ .name = #_id, \ -@@ -135,6 +159,14 @@ static struct regulator_ops axp20x_ops = { +@@ -135,6 +159,14 @@ static struct regulator_ops axp20x_ops = .is_enabled = regulator_is_enabled_regmap, }; @@ -78,7 +76,7 @@ index 50ae0b5..6468291 100644 static const struct regulator_desc axp20x_regulators[] = { AXP_DESC(AXP20X, DCDC2, "dcdc2", "vin2", 700, 2275, 25, AXP20X_DCDC2_V_OUT, 0x3f, AXP20X_PWR_OUT_CTRL, 0x10), -@@ -152,6 +184,52 @@ static const struct regulator_desc axp20x_regulators[] = { +@@ -152,6 +184,52 @@ static const struct regulator_desc axp20 AXP20X_IO_ENABLED, AXP20X_IO_DISABLED), }; @@ -131,7 +129,7 @@ index 50ae0b5..6468291 100644 static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq) { struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent); -@@ -165,6 +243,12 @@ static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq) +@@ -165,6 +243,12 @@ static int axp20x_set_dcdc_freq(struct p def = 1500; step = 75; break; @@ -144,7 +142,7 @@ index 50ae0b5..6468291 100644 default: dev_err(&pdev->dev, "Setting DCDC frequency for unsupported AXP variant\n"); -@@ -237,6 +321,14 @@ static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 work +@@ -237,6 +321,14 @@ static int axp20x_set_dcdc_workmode(stru workmode <<= ffs(mask) - 1; break; @@ -159,7 +157,7 @@ index 50ae0b5..6468291 100644 default: /* should not happen */ WARN_ON(1); -@@ -265,6 +357,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev) +@@ -265,6 +357,10 @@ static int axp20x_regulator_probe(struct regulators = axp20x_regulators; nregulators = AXP20X_REG_ID_MAX; break; diff --git a/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch b/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch index eba960e..a458579 100644 --- a/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch +++ b/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch @@ -26,11 +26,9 @@ Changes in v3: include/linux/mfd/axp20x.h | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) -diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c -index b369cfc..8bd3283 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c -@@ -61,10 +61,16 @@ static const struct regmap_access_table axp152_volatile_table = { +@@ -39,10 +39,16 @@ static const char * const axp20x_model_n static const struct regmap_range axp20x_writeable_ranges[] = { regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES), @@ -47,7 +45,7 @@ index b369cfc..8bd3283 100644 }; static const struct regmap_access_table axp20x_writeable_table = { -@@ -195,7 +201,7 @@ static const struct regmap_config axp20x_regmap_config = { +@@ -159,7 +165,7 @@ static const struct regmap_config axp20x .val_bits = 8, .wr_table = &axp20x_writeable_table, .volatile_table = &axp20x_volatile_table, @@ -56,11 +54,9 @@ index b369cfc..8bd3283 100644 .cache_type = REGCACHE_RBTREE, }; -diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h -index 52203d5..cc8ad1e 100644 --- a/include/linux/mfd/axp20x.h +++ b/include/linux/mfd/axp20x.h -@@ -190,6 +190,12 @@ enum { +@@ -151,6 +151,12 @@ enum { #define AXP20X_CC_CTRL 0xb8 #define AXP20X_FG_RES 0xb9 diff --git a/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch b/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch index 0aa420c..f0c9055 100644 --- a/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch +++ b/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch @@ -13,11 +13,9 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org> drivers/mfd/axp20x.c | 2 ++ 1 file changed, 2 insertions(+) -diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c -index cfbb7d7..6df9155 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c -@@ -370,6 +370,8 @@ static struct mfd_cell axp22x_cells[] = { +@@ -376,6 +376,8 @@ static struct mfd_cell axp22x_cells[] = .name = "axp20x-pek", .num_resources = ARRAY_SIZE(axp22x_pek_resources), .resources = axp22x_pek_resources, diff --git a/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch b/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch index da3867d..a653f94 100644 --- a/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch +++ b/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch @@ -14,8 +14,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org> include/linux/mfd/axp20x.h | 61 +++++++++++++++++++++++++++++++++- 2 files changed, 143 insertions(+), 1 deletion(-) -diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c -index 8c2c3c4..b369cfc 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -30,12 +30,34 @@ @@ -53,7 +51,7 @@ index 8c2c3c4..b369cfc 100644 static const struct regmap_range axp20x_writeable_ranges[] = { regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES), -@@ -93,6 +115,11 @@ static const struct regmap_access_table axp288_volatile_table = { +@@ -99,6 +121,11 @@ static const struct regmap_access_table .n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges), }; @@ -65,7 +63,7 @@ index 8c2c3c4..b369cfc 100644 static struct resource axp20x_pek_resources[] = { { .name = "PEK_DBR", -@@ -154,6 +181,15 @@ static struct resource axp288_fuel_gauge_resources[] = { +@@ -160,6 +187,15 @@ static struct resource axp288_fuel_gauge }, }; @@ -81,7 +79,7 @@ index 8c2c3c4..b369cfc 100644 static const struct regmap_config axp20x_regmap_config = { .reg_bits = 8, .val_bits = 8, -@@ -184,6 +220,26 @@ static const struct regmap_config axp288_regmap_config = { +@@ -190,6 +226,26 @@ static const struct regmap_config axp288 #define INIT_REGMAP_IRQ(_variant, _irq, _off, _mask) \ [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } @@ -108,7 +106,7 @@ index 8c2c3c4..b369cfc 100644 static const struct regmap_irq axp20x_regmap_irqs[] = { INIT_REGMAP_IRQ(AXP20X, ACIN_OVER_V, 0, 7), INIT_REGMAP_IRQ(AXP20X, ACIN_PLUGIN, 0, 6), -@@ -293,6 +349,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = { +@@ -299,6 +355,7 @@ static const struct regmap_irq axp288_re }; static const struct of_device_id axp20x_of_match[] = { @@ -116,7 +114,7 @@ index 8c2c3c4..b369cfc 100644 { .compatible = "x-powers,axp202", .data = (void *) AXP202_ID }, { .compatible = "x-powers,axp209", .data = (void *) AXP209_ID }, { .compatible = "x-powers,axp221", .data = (void *) AXP221_ID }, -@@ -317,6 +374,18 @@ static const struct acpi_device_id axp20x_acpi_match[] = { +@@ -323,6 +380,18 @@ static const struct acpi_device_id axp20 }; MODULE_DEVICE_TABLE(acpi, axp20x_acpi_match); @@ -135,7 +133,7 @@ index 8c2c3c4..b369cfc 100644 static const struct regmap_irq_chip axp20x_regmap_irq_chip = { .name = "axp20x_irq_chip", .status_base = AXP20X_IRQ1_STATE, -@@ -375,6 +444,14 @@ static struct mfd_cell axp22x_cells[] = { +@@ -381,6 +450,14 @@ static struct mfd_cell axp22x_cells[] = }, }; @@ -150,7 +148,7 @@ index 8c2c3c4..b369cfc 100644 static struct resource axp288_adc_resources[] = { { .name = "GPADC", -@@ -513,6 +590,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev) +@@ -519,6 +596,12 @@ static int axp20x_match_device(struct ax } switch (axp20x->variant) { @@ -163,8 +161,6 @@ index 8c2c3c4..b369cfc 100644 case AXP202_ID: case AXP209_ID: axp20x->nr_cells = ARRAY_SIZE(axp20x_cells); -diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h -index c2aa853..52203d5 100644 --- a/include/linux/mfd/axp20x.h +++ b/include/linux/mfd/axp20x.h @@ -12,7 +12,8 @@ @@ -236,7 +232,7 @@ index c2aa853..52203d5 100644 #define AXP20X_GPIO0_CTRL 0x90 #define AXP20X_LDO5_V_OUT 0x91 #define AXP20X_GPIO1_CTRL 0x92 -@@ -218,6 +257,26 @@ enum { +@@ -224,6 +263,26 @@ enum { /* IRQs */ enum { diff --git a/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch b/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch index 4f22ce1..f1af823 100644 --- a/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch +++ b/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch @@ -15,11 +15,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/nand_base.c | 91 +++++++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 35 deletions(-) -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index c2e1232..f580ed1 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -3892,42 +3892,15 @@ static bool nand_ecc_strength_good(struct mtd_info *mtd) +@@ -3892,42 +3892,15 @@ static bool nand_ecc_strength_good(struc return corr >= ds_corr && ecc->strength >= chip->ecc_strength_ds; } @@ -42,7 +40,7 @@ index c2e1232..f580ed1 100644 - struct nand_chip *chip = mtd->priv; - struct nand_ecc_ctrl *ecc = &chip->ecc; - struct nand_buffers *nbuf; -- + - /* New bad blocks should be marked in OOB, flash-based BBT, or both */ - BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) && - !(chip->bbt_options & NAND_BBT_USE_FLASH)); @@ -55,7 +53,7 @@ index c2e1232..f580ed1 100644 - nbuf->ecccalc = (uint8_t *)(nbuf + 1); - nbuf->ecccode = nbuf->ecccalc + mtd->oobsize; - nbuf->databuf = nbuf->ecccode + mtd->oobsize; - +- - chip->buffers = nbuf; - } else { - if (!chip->buffers) diff --git a/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch b/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch index 88e313d..d4eaeec 100644 --- a/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch +++ b/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch @@ -27,8 +27,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> include/linux/mtd/nand.h | 38 +++ 6 files changed, 635 insertions(+), 141 deletions(-) -diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig -index 5897d8d..8242470 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig @@ -22,6 +22,10 @@ menuconfig MTD_NAND @@ -42,22 +40,18 @@ index 5897d8d..8242470 100644 config MTD_NAND_BCH tristate select BCH -diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile -index 582bbd05..fcbe032 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile -@@ -53,4 +53,6 @@ obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) += bcm47xxnflash/ +@@ -53,4 +53,6 @@ obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) += obj-$(CONFIG_MTD_NAND_SUNXI) += sunxi_nand.o obj-$(CONFIG_MTD_NAND_HISI504) += hisi504_nand.o +obj-$(CONFIG_MTD_OF_NAND_PARTS) += ofnandpart.o + nand-objs := nand_base.o nand_bbt.o nand_timings.o -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index f580ed1..a30b67f 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -1134,26 +1134,26 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd, +@@ -1134,26 +1134,26 @@ static int nand_read_page_raw_syndrome(s struct nand_chip *chip, uint8_t *buf, int oob_required, int page) { @@ -93,7 +87,7 @@ index f580ed1..a30b67f 100644 } } -@@ -1175,30 +1175,31 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd, +@@ -1175,30 +1175,31 @@ static int nand_read_page_raw_syndrome(s static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, uint8_t *buf, int oob_required, int page) { @@ -134,7 +128,7 @@ index f580ed1..a30b67f 100644 if (stat < 0) { mtd->ecc_stats.failed++; } else { -@@ -1223,7 +1224,7 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1223,7 +1224,7 @@ static int nand_read_subpage(struct mtd_ int page) { int start_step, end_step, num_steps; @@ -143,7 +137,7 @@ index f580ed1..a30b67f 100644 uint8_t *p; int data_col_addr, i, gaps = 0; int datafrag_len, eccfrag_len, aligned_len, aligned_pos; -@@ -1232,16 +1233,16 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1232,16 +1233,16 @@ static int nand_read_subpage(struct mtd_ unsigned int max_bitflips = 0; /* Column address within the page aligned to ECC size (256bytes) */ @@ -166,7 +160,7 @@ index f580ed1..a30b67f 100644 /* If we read not a page aligned data */ if (data_col_addr != 0) chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1); -@@ -1250,8 +1251,9 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1250,8 +1251,9 @@ static int nand_read_subpage(struct mtd_ chip->read_buf(mtd, p, datafrag_len); /* Calculate ECC */ @@ -178,7 +172,7 @@ index f580ed1..a30b67f 100644 /* * The performance is faster if we position offsets according to -@@ -1275,7 +1277,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1275,7 +1277,8 @@ static int nand_read_subpage(struct mtd_ aligned_len = eccfrag_len; if (eccpos[index] & (busw - 1)) aligned_len++; @@ -188,7 +182,7 @@ index f580ed1..a30b67f 100644 aligned_len++; chip->cmdfunc(mtd, NAND_CMD_RNDOUT, -@@ -1287,11 +1290,13 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1287,11 +1290,13 @@ static int nand_read_subpage(struct mtd_ chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]]; p = bufpoi + data_col_addr; @@ -205,7 +199,7 @@ index f580ed1..a30b67f 100644 if (stat < 0) { mtd->ecc_stats.failed++; } else { -@@ -1315,32 +1320,33 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1315,32 +1320,33 @@ static int nand_read_subpage(struct mtd_ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, uint8_t *buf, int oob_required, int page) { @@ -248,7 +242,7 @@ index f580ed1..a30b67f 100644 if (stat < 0) { mtd->ecc_stats.failed++; } else { -@@ -1368,12 +1374,12 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1368,12 +1374,12 @@ static int nand_read_page_hwecc(struct m static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, struct nand_chip *chip, uint8_t *buf, int oob_required, int page) { @@ -265,7 +259,7 @@ index f580ed1..a30b67f 100644 uint8_t *ecc_calc = chip->buffers->ecccalc; unsigned int max_bitflips = 0; -@@ -1382,17 +1388,17 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, +@@ -1382,17 +1388,17 @@ static int nand_read_page_hwecc_oob_firs chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page); @@ -287,7 +281,7 @@ index f580ed1..a30b67f 100644 if (stat < 0) { mtd->ecc_stats.failed++; } else { -@@ -1417,9 +1423,9 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, +@@ -1417,9 +1423,9 @@ static int nand_read_page_hwecc_oob_firs static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip, uint8_t *buf, int oob_required, int page) { @@ -300,7 +294,7 @@ index f580ed1..a30b67f 100644 uint8_t *p = buf; uint8_t *oob = chip->oob_poi; unsigned int max_bitflips = 0; -@@ -1427,17 +1433,17 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1427,17 +1433,17 @@ static int nand_read_page_syndrome(struc for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { int stat; @@ -324,7 +318,7 @@ index f580ed1..a30b67f 100644 if (stat < 0) { mtd->ecc_stats.failed++; -@@ -1448,9 +1454,9 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1448,9 +1454,9 @@ static int nand_read_page_syndrome(struc oob += eccbytes; @@ -337,7 +331,7 @@ index f580ed1..a30b67f 100644 } } -@@ -1480,7 +1486,7 @@ static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob, +@@ -1480,7 +1486,7 @@ static uint8_t *nand_transfer_oob(struct return oob + len; case MTD_OPS_AUTO_OOB: { @@ -346,7 +340,7 @@ index f580ed1..a30b67f 100644 uint32_t boffs = 0, roffs = ops->ooboffs; size_t bytes = 0; -@@ -1600,17 +1606,21 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from, +@@ -1600,17 +1606,21 @@ read_retry: * the read methods return max bitflips per ecc step. */ if (unlikely(ops->mode == MTD_OPS_RAW)) @@ -376,7 +370,7 @@ index f580ed1..a30b67f 100644 if (ret < 0) { if (use_bufpoi) /* Invalidate page cache */ -@@ -1746,6 +1756,39 @@ static int nand_read(struct mtd_info *mtd, loff_t from, size_t len, +@@ -1746,6 +1756,39 @@ static int nand_read(struct mtd_info *mt } /** @@ -416,7 +410,7 @@ index f580ed1..a30b67f 100644 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function * @mtd: mtd info structure * @chip: nand chip info structure -@@ -1770,13 +1813,14 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1770,13 +1813,14 @@ static int nand_read_oob_syndrome(struct int page) { int length = mtd->oobsize; @@ -435,7 +429,7 @@ index f580ed1..a30b67f 100644 if (sndrnd) { pos = eccsize + i * (eccsize + chunk); if (mtd->writesize > 512) -@@ -1829,9 +1873,10 @@ static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1829,9 +1873,10 @@ static int nand_write_oob_std(struct mtd static int nand_write_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, int page) { @@ -449,7 +443,7 @@ index f580ed1..a30b67f 100644 const uint8_t *bufpoi = chip->oob_poi; /* -@@ -1839,7 +1884,7 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd, +@@ -1839,7 +1884,7 @@ static int nand_write_oob_syndrome(struc * or * data-pad-ecc-pad-data-pad .... ecc-pad-oob */ @@ -458,7 +452,7 @@ index f580ed1..a30b67f 100644 pos = steps * (eccsize + chunk); steps = 0; } else -@@ -1903,7 +1948,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from, +@@ -1903,7 +1948,7 @@ static int nand_do_read_oob(struct mtd_i stats = mtd->ecc_stats; if (ops->mode == MTD_OPS_AUTO_OOB) @@ -467,7 +461,7 @@ index f580ed1..a30b67f 100644 else len = mtd->oobsize; -@@ -1931,9 +1976,9 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from, +@@ -1931,9 +1976,9 @@ static int nand_do_read_oob(struct mtd_i while (1) { if (ops->mode == MTD_OPS_RAW) @@ -479,7 +473,7 @@ index f580ed1..a30b67f 100644 if (ret < 0) break; -@@ -2021,6 +2066,56 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from, +@@ -2021,6 +2066,56 @@ out: return ret; } @@ -536,7 +530,7 @@ index f580ed1..a30b67f 100644 /** * nand_write_page_raw - [INTERN] raw page write function -@@ -2054,26 +2149,26 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd, +@@ -2054,26 +2149,26 @@ static int nand_write_page_raw_syndrome( struct nand_chip *chip, const uint8_t *buf, int oob_required) { @@ -572,7 +566,7 @@ index f580ed1..a30b67f 100644 } } -@@ -2093,21 +2188,21 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd, +@@ -2093,21 +2188,21 @@ static int nand_write_page_raw_syndrome( static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, const uint8_t *buf, int oob_required) { @@ -601,7 +595,7 @@ index f580ed1..a30b67f 100644 } /** -@@ -2120,20 +2215,20 @@ static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, +@@ -2120,20 +2215,20 @@ static int nand_write_page_swecc(struct static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, const uint8_t *buf, int oob_required) { @@ -629,7 +623,7 @@ index f580ed1..a30b67f 100644 chip->oob_poi[eccpos[i]] = ecc_calc[i]; chip->write_buf(mtd, chip->oob_poi, mtd->oobsize); -@@ -2158,10 +2253,10 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd, +@@ -2158,10 +2253,10 @@ static int nand_write_subpage_hwecc(stru { uint8_t *oob_buf = chip->oob_poi; uint8_t *ecc_calc = chip->buffers->ecccalc; @@ -644,7 +638,7 @@ index f580ed1..a30b67f 100644 uint32_t start_step = offset / ecc_size; uint32_t end_step = (offset + data_len - 1) / ecc_size; int oob_bytes = mtd->oobsize / ecc_steps; -@@ -2169,7 +2264,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd, +@@ -2169,7 +2264,7 @@ static int nand_write_subpage_hwecc(stru for (step = 0; step < ecc_steps; step++) { /* configure controller for WRITE access */ @@ -653,7 +647,7 @@ index f580ed1..a30b67f 100644 /* write data (untouched subpages already masked by 0xFF) */ chip->write_buf(mtd, buf, ecc_size); -@@ -2178,7 +2273,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd, +@@ -2178,7 +2273,7 @@ static int nand_write_subpage_hwecc(stru if ((step < start_step) || (step > end_step)) memset(ecc_calc, 0xff, ecc_bytes); else @@ -662,7 +656,7 @@ index f580ed1..a30b67f 100644 /* mask OOB of un-touched subpages by padding 0xFF */ /* if oob_required, preserve OOB metadata of written subpage */ -@@ -2193,7 +2288,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd, +@@ -2193,7 +2288,7 @@ static int nand_write_subpage_hwecc(stru /* copy calculated ECC for whole page to chip->buffer->oob */ /* this include masked-value(0xFF) for unwritten subpages */ ecc_calc = chip->buffers->ecccalc; @@ -671,7 +665,7 @@ index f580ed1..a30b67f 100644 chip->oob_poi[eccpos[i]] = ecc_calc[i]; /* write OOB buffer to NAND device */ -@@ -2217,29 +2312,29 @@ static int nand_write_page_syndrome(struct mtd_info *mtd, +@@ -2217,29 +2312,29 @@ static int nand_write_page_syndrome(stru struct nand_chip *chip, const uint8_t *buf, int oob_required) { @@ -712,7 +706,7 @@ index f580ed1..a30b67f 100644 } } -@@ -2270,7 +2365,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip, +@@ -2270,7 +2365,7 @@ static int nand_write_page(struct mtd_in int status, subpage; if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && @@ -721,7 +715,7 @@ index f580ed1..a30b67f 100644 subpage = offset || (data_len < mtd->writesize); else subpage = 0; -@@ -2278,13 +2373,15 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip, +@@ -2278,13 +2373,15 @@ static int nand_write_page(struct mtd_in chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page); if (unlikely(raw)) @@ -742,7 +736,7 @@ index f580ed1..a30b67f 100644 if (status < 0) return status; -@@ -2343,7 +2440,7 @@ static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len, +@@ -2343,7 +2440,7 @@ static uint8_t *nand_fill_oob(struct mtd return oob + len; case MTD_OPS_AUTO_OOB: { @@ -751,7 +745,7 @@ index f580ed1..a30b67f 100644 uint32_t boffs = 0, woffs = ops->ooboffs; size_t bytes = 0; -@@ -2539,6 +2636,46 @@ static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len, +@@ -2539,6 +2636,46 @@ static int panic_nand_write(struct mtd_i } /** @@ -798,7 +792,7 @@ index f580ed1..a30b67f 100644 * nand_write - [MTD Interface] NAND write with ECC * @mtd: MTD device structure * @to: offset to write to -@@ -2566,6 +2703,39 @@ static int nand_write(struct mtd_info *mtd, loff_t to, size_t len, +@@ -2566,6 +2703,39 @@ static int nand_write(struct mtd_info *m } /** @@ -838,7 +832,7 @@ index f580ed1..a30b67f 100644 * nand_do_write_oob - [MTD Interface] NAND write out-of-band * @mtd: MTD device structure * @to: offset to write to -@@ -2583,7 +2753,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to, +@@ -2583,7 +2753,7 @@ static int nand_do_write_oob(struct mtd_ __func__, (unsigned int)to, (int)ops->ooblen); if (ops->mode == MTD_OPS_AUTO_OOB) @@ -847,7 +841,7 @@ index f580ed1..a30b67f 100644 else len = mtd->oobsize; -@@ -2637,9 +2807,11 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to, +@@ -2637,9 +2807,11 @@ static int nand_do_write_oob(struct mtd_ nand_fill_oob(mtd, ops->oobbuf, ops->ooblen, ops); if (ops->mode == MTD_OPS_RAW) @@ -861,7 +855,7 @@ index f580ed1..a30b67f 100644 chip->select_chip(mtd, -1); -@@ -2694,6 +2866,54 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to, +@@ -2694,6 +2866,54 @@ out: } /** @@ -916,7 +910,7 @@ index f580ed1..a30b67f 100644 * single_erase - [GENERIC] NAND standard block erase command function * @mtd: MTD device structure * @page: the page address of the block which will be erased -@@ -2723,6 +2943,29 @@ static int nand_erase(struct mtd_info *mtd, struct erase_info *instr) +@@ -2723,6 +2943,29 @@ static int nand_erase(struct mtd_info *m } /** @@ -946,7 +940,7 @@ index f580ed1..a30b67f 100644 * nand_erase_nand - [INTERN] erase block(s) * @mtd: MTD device structure * @instr: erase instruction -@@ -2864,6 +3107,18 @@ static int nand_block_isbad(struct mtd_info *mtd, loff_t offs) +@@ -2864,6 +3107,18 @@ static int nand_block_isbad(struct mtd_i } /** @@ -965,7 +959,7 @@ index f580ed1..a30b67f 100644 * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad * @mtd: MTD device structure * @ofs: offset relative to mtd start -@@ -2884,6 +3139,33 @@ static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs) +@@ -2884,6 +3139,33 @@ static int nand_block_markbad(struct mtd } /** @@ -999,7 +993,7 @@ index f580ed1..a30b67f 100644 * nand_onfi_set_features- [REPLACEABLE] set features for ONFI nand * @mtd: MTD device structure * @chip: nand chip info structure -@@ -4099,6 +4381,169 @@ static int nand_ecc_ctrl_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc) +@@ -4099,6 +4381,169 @@ static int nand_ecc_ctrl_init(struct mtd } /** @@ -1181,11 +1175,9 @@ index f580ed1..a30b67f 100644 /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */ if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) { switch (ecc->steps) { -diff --git a/drivers/mtd/nand/nand_bch.c b/drivers/mtd/nand/nand_bch.c -index 3803e0b..b82b976 100644 --- a/drivers/mtd/nand/nand_bch.c +++ b/drivers/mtd/nand/nand_bch.c -@@ -53,14 +53,14 @@ int nand_bch_calculate_ecc(struct mtd_info *mtd, const unsigned char *buf, +@@ -53,14 +53,14 @@ int nand_bch_calculate_ecc(struct mtd_in unsigned char *code) { const struct nand_chip *chip = mtd->priv; @@ -1204,7 +1196,7 @@ index 3803e0b..b82b976 100644 code[i] ^= nbc->eccmask[i]; return 0; -@@ -80,15 +80,15 @@ int nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf, +@@ -80,15 +80,15 @@ int nand_bch_correct_data(struct mtd_inf unsigned char *read_ecc, unsigned char *calc_ecc) { const struct nand_chip *chip = mtd->priv; @@ -1224,11 +1216,9 @@ index 3803e0b..b82b976 100644 /* error is located in data, correct it */ buf[errloc[i] >> 3] ^= (1 << (errloc[i] & 7)); /* else error in ecc, no action needed */ -diff --git a/drivers/mtd/nand/nand_ecc.c b/drivers/mtd/nand/nand_ecc.c -index 97c4c02..f35c418 100644 --- a/drivers/mtd/nand/nand_ecc.c +++ b/drivers/mtd/nand/nand_ecc.c -@@ -424,7 +424,7 @@ int nand_calculate_ecc(struct mtd_info *mtd, const unsigned char *buf, +@@ -424,7 +424,7 @@ int nand_calculate_ecc(struct mtd_info * unsigned char *code) { __nand_calculate_ecc(buf, @@ -1237,7 +1227,7 @@ index 97c4c02..f35c418 100644 return 0; } -@@ -524,7 +524,7 @@ int nand_correct_data(struct mtd_info *mtd, unsigned char *buf, +@@ -524,7 +524,7 @@ int nand_correct_data(struct mtd_info *m unsigned char *read_ecc, unsigned char *calc_ecc) { return __nand_correct_data(buf, read_ecc, calc_ecc, @@ -1246,8 +1236,6 @@ index 97c4c02..f35c418 100644 } EXPORT_SYMBOL(nand_correct_data); -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 3d4ea7e..510e09b 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -708,6 +708,7 @@ struct nand_chip { diff --git a/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch b/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch index 135f50a..76f0051 100644 --- a/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch +++ b/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch @@ -17,9 +17,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> 2 files changed, 121 insertions(+) create mode 100644 drivers/mtd/nand/ofnandpart.c -diff --git a/drivers/mtd/nand/ofnandpart.c b/drivers/mtd/nand/ofnandpart.c -new file mode 100644 -index 0000000..293daee --- /dev/null +++ b/drivers/mtd/nand/ofnandpart.c @@ -0,0 +1,104 @@ @@ -127,11 +124,9 @@ index 0000000..293daee +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Parser for NAND flash partitioning information in device tree"); +MODULE_AUTHOR("Boris BREZILLON"); -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 510e09b..5616f51 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h -@@ -1013,6 +1013,23 @@ static inline int jedec_feature(struct nand_chip *chip) +@@ -1014,6 +1014,23 @@ static inline int jedec_feature(struct n : 0; } diff --git a/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch b/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch index efab359..45b9679 100644 --- a/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch +++ b/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch @@ -24,11 +24,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> include/linux/mtd/nand.h | 21 ++++++ 2 files changed, 175 insertions(+) -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index a30b67f..8a5d12e 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -1102,6 +1102,138 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) +@@ -1102,6 +1102,138 @@ out: EXPORT_SYMBOL(nand_lock); /** @@ -167,7 +165,7 @@ index a30b67f..8a5d12e 100644 * nand_read_page_raw - [INTERN] read raw page data without ecc * @mtd: mtd info structure * @chip: nand chip info structure -@@ -2539,6 +2671,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to, +@@ -2539,6 +2671,7 @@ static int nand_do_write_ops(struct mtd_ uint8_t *wbuf = buf; int use_bufpoi; int part_pagewr = (column || writelen < (mtd->writesize - 1)); @@ -175,7 +173,7 @@ index a30b67f..8a5d12e 100644 if (part_pagewr) use_bufpoi = 1; -@@ -2574,6 +2707,14 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to, +@@ -2574,6 +2707,14 @@ static int nand_do_write_ops(struct mtd_ if (ret) break; @@ -190,7 +188,7 @@ index a30b67f..8a5d12e 100644 writelen -= bytes; if (!writelen) break; -@@ -2979,6 +3120,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, +@@ -2979,6 +3120,7 @@ int nand_erase_nand(struct mtd_info *mtd int page, status, pages_per_block, ret, chipnr; struct nand_chip *chip = mtd->priv; loff_t len; @@ -198,7 +196,7 @@ index a30b67f..8a5d12e 100644 pr_debug("%s: start = 0x%012llx, len = %llu\n", __func__, (unsigned long long)instr->addr, -@@ -3051,6 +3193,18 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, +@@ -3051,6 +3193,18 @@ int nand_erase_nand(struct mtd_info *mtd goto erase_exit; } @@ -217,8 +215,6 @@ index a30b67f..8a5d12e 100644 /* Increment page address and decrement length */ len -= (1ULL << chip->phys_erase_shift); page += pages_per_block; -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 5616f51..4f7ca8d 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -521,6 +521,24 @@ struct nand_ecc_ctrl { diff --git a/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch b/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch index 7d1bdbd..173bd1e 100644 --- a/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch +++ b/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch @@ -34,11 +34,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> include/linux/mtd/nand.h | 98 +++++++++++++++ 2 files changed, 321 insertions(+), 55 deletions(-) -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index 8a5d12e..577cb9e 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -1102,6 +1102,62 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) +@@ -1102,6 +1102,62 @@ out: EXPORT_SYMBOL(nand_lock); /** @@ -119,7 +117,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -1270,28 +1331,40 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd, +@@ -1270,28 +1331,40 @@ static int nand_read_page_raw_syndrome(s int eccbytes = chip->cur_ecc->bytes; uint8_t *oob = chip->oob_poi; int steps, size; @@ -166,7 +164,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -1380,7 +1453,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1380,7 +1453,8 @@ static int nand_read_subpage(struct mtd_ chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1); p = bufpoi + data_col_addr; @@ -176,7 +174,7 @@ index 8a5d12e..577cb9e 100644 /* Calculate ECC */ for (i = 0; i < eccfrag_len; -@@ -1399,7 +1473,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1399,7 +1473,8 @@ static int nand_read_subpage(struct mtd_ } if (gaps) { chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1); @@ -186,7 +184,7 @@ index 8a5d12e..577cb9e 100644 } else { /* * Send the command to read the particular ECC bytes take care -@@ -1415,7 +1490,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1415,7 +1490,8 @@ static int nand_read_subpage(struct mtd_ chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize + aligned_pos, -1); @@ -196,7 +194,7 @@ index 8a5d12e..577cb9e 100644 } for (i = 0; i < eccfrag_len; i++) -@@ -1436,6 +1512,7 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1436,6 +1512,7 @@ static int nand_read_subpage(struct mtd_ max_bitflips = max_t(unsigned int, max_bitflips, stat); } } @@ -204,7 +202,7 @@ index 8a5d12e..577cb9e 100644 return max_bitflips; } -@@ -1460,13 +1537,17 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1460,13 +1537,17 @@ static int nand_read_page_hwecc(struct m uint8_t *ecc_code = chip->buffers->ecccode; uint32_t *eccpos = chip->cur_ecc->layout->eccpos; unsigned int max_bitflips = 0; @@ -224,7 +222,7 @@ index 8a5d12e..577cb9e 100644 for (i = 0; i < chip->cur_ecc->total; i++) ecc_code[i] = chip->oob_poi[eccpos[i]]; -@@ -1486,6 +1567,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1486,6 +1567,7 @@ static int nand_read_page_hwecc(struct m max_bitflips = max_t(unsigned int, max_bitflips, stat); } } @@ -232,7 +230,7 @@ index 8a5d12e..577cb9e 100644 return max_bitflips; } -@@ -1514,11 +1596,14 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, +@@ -1514,11 +1596,14 @@ static int nand_read_page_hwecc_oob_firs uint32_t *eccpos = chip->cur_ecc->layout->eccpos; uint8_t *ecc_calc = chip->buffers->ecccalc; unsigned int max_bitflips = 0; @@ -248,7 +246,7 @@ index 8a5d12e..577cb9e 100644 for (i = 0; i < chip->cur_ecc->total; i++) ecc_code[i] = chip->oob_poi[eccpos[i]]; -@@ -1527,7 +1612,8 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, +@@ -1527,7 +1612,8 @@ static int nand_read_page_hwecc_oob_firs int stat; chip->cur_ecc->hwctl(mtd, NAND_ECC_READ); @@ -258,7 +256,7 @@ index 8a5d12e..577cb9e 100644 chip->cur_ecc->calculate(mtd, p, &ecc_calc[i]); stat = chip->cur_ecc->correct(mtd, p, &ecc_code[i], NULL); -@@ -1538,6 +1624,7 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, +@@ -1538,6 +1624,7 @@ static int nand_read_page_hwecc_oob_firs max_bitflips = max_t(unsigned int, max_bitflips, stat); } } @@ -266,7 +264,7 @@ index 8a5d12e..577cb9e 100644 return max_bitflips; } -@@ -1561,20 +1648,27 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1561,20 +1648,27 @@ static int nand_read_page_syndrome(struc uint8_t *p = buf; uint8_t *oob = chip->oob_poi; unsigned int max_bitflips = 0; @@ -297,7 +295,7 @@ index 8a5d12e..577cb9e 100644 stat = chip->cur_ecc->correct(mtd, p, oob, NULL); if (stat < 0) { -@@ -1587,29 +1681,36 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1587,29 +1681,36 @@ static int nand_read_page_syndrome(struc oob += eccbytes; if (chip->cur_ecc->postpad) { @@ -339,7 +337,7 @@ index 8a5d12e..577cb9e 100644 switch (ops->mode) { case MTD_OPS_PLACE_OOB: -@@ -1737,6 +1838,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from, +@@ -1737,6 +1838,7 @@ read_retry: * Now read the page into the buffer. Absent an error, * the read methods return max bitflips per ecc step. */ @@ -347,7 +345,7 @@ index 8a5d12e..577cb9e 100644 if (unlikely(ops->mode == MTD_OPS_RAW)) ret = chip->cur_ecc->read_page_raw(mtd, chip, bufpoi, -@@ -1753,6 +1855,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from, +@@ -1753,6 +1855,8 @@ read_retry: bufpoi, oob_required, page); @@ -356,7 +354,7 @@ index 8a5d12e..577cb9e 100644 if (ret < 0) { if (use_bufpoi) /* Invalidate page cache */ -@@ -1780,8 +1884,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from, +@@ -1780,8 +1884,8 @@ read_retry: int toread = min(oobreadlen, max_oobsize); if (toread) { @@ -367,7 +365,7 @@ index 8a5d12e..577cb9e 100644 oobreadlen -= toread; } } -@@ -1909,12 +2013,15 @@ static int nand_part_read(struct mtd_info *mtd, loff_t from, size_t len, +@@ -1909,12 +2013,15 @@ static int nand_part_read(struct mtd_inf nand_get_device(part->master, FL_READING); if (part->ecc) chip->cur_ecc = part->ecc; @@ -383,7 +381,7 @@ index 8a5d12e..577cb9e 100644 chip->cur_ecc = &chip->ecc; nand_release_device(part->master); return ret; -@@ -1930,7 +2037,9 @@ static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1930,7 +2037,9 @@ static int nand_read_oob_std(struct mtd_ int page) { chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page); @@ -394,7 +392,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -1949,7 +2058,7 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1949,7 +2058,7 @@ static int nand_read_oob_syndrome(struct chip->cur_ecc->postpad; int eccsize = chip->cur_ecc->size; uint8_t *bufpoi = chip->oob_poi; @@ -403,7 +401,7 @@ index 8a5d12e..577cb9e 100644 chip->cmdfunc(mtd, NAND_CMD_READ0, chip->cur_ecc->size, page); for (i = 0; i < chip->cur_ecc->steps; i++) { -@@ -1962,12 +2071,17 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1962,12 +2071,17 @@ static int nand_read_oob_syndrome(struct } else sndrnd = 1; toread = min_t(int, length, chunk); @@ -424,7 +422,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -1986,7 +2100,9 @@ static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip, +@@ -1986,7 +2100,9 @@ static int nand_write_oob_std(struct mtd int length = mtd->oobsize; chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page); @@ -435,7 +433,7 @@ index 8a5d12e..577cb9e 100644 /* Send command to program the OOB data */ chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1); -@@ -2042,12 +2158,18 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd, +@@ -2042,12 +2158,18 @@ static int nand_write_oob_syndrome(struc } else sndcmd = 1; len = min_t(int, length, chunk); @@ -457,7 +455,7 @@ index 8a5d12e..577cb9e 100644 chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1); status = chip->waitfunc(mtd, chip); -@@ -2116,7 +2238,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from, +@@ -2116,7 +2238,7 @@ static int nand_do_read_oob(struct mtd_i break; len = min(len, readlen); @@ -466,7 +464,7 @@ index 8a5d12e..577cb9e 100644 if (chip->options & NAND_NEED_READRDY) { /* Apply delay or wait for ready/busy pin */ -@@ -2226,6 +2348,8 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from, +@@ -2226,6 +2348,8 @@ static int nand_part_read_oob(struct mtd nand_get_device(part->master, FL_READING); if (part->ecc) chip->cur_ecc = part->ecc; @@ -475,7 +473,7 @@ index 8a5d12e..577cb9e 100644 switch (ops->mode) { case MTD_OPS_PLACE_OOB: -@@ -2243,6 +2367,7 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from, +@@ -2243,6 +2367,7 @@ static int nand_part_read_oob(struct mtd ret = nand_do_read_ops(part->master, from, ops); out: @@ -483,7 +481,7 @@ index 8a5d12e..577cb9e 100644 chip->cur_ecc = &chip->ecc; nand_release_device(part->master); return ret; -@@ -2261,9 +2386,11 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from, +@@ -2261,9 +2386,11 @@ out: static int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, const uint8_t *buf, int oob_required) { @@ -498,7 +496,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -2285,28 +2412,39 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd, +@@ -2285,28 +2412,39 @@ static int nand_write_page_raw_syndrome( int eccbytes = chip->cur_ecc->bytes; uint8_t *oob = chip->oob_poi; int steps, size; @@ -544,7 +542,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -2353,17 +2491,21 @@ static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, +@@ -2353,17 +2491,21 @@ static int nand_write_page_hwecc(struct uint8_t *ecc_calc = chip->buffers->ecccalc; const uint8_t *p = buf; uint32_t *eccpos = chip->cur_ecc->layout->eccpos; @@ -568,7 +566,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -2399,7 +2541,9 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd, +@@ -2399,7 +2541,9 @@ static int nand_write_subpage_hwecc(stru chip->cur_ecc->hwctl(mtd, NAND_ECC_WRITE); /* write data (untouched subpages already masked by 0xFF) */ @@ -579,7 +577,7 @@ index 8a5d12e..577cb9e 100644 /* mask ECC of un-touched subpages by padding 0xFF */ if ((step < start_step) || (step > end_step)) -@@ -2424,7 +2568,8 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd, +@@ -2424,7 +2568,8 @@ static int nand_write_subpage_hwecc(stru chip->oob_poi[eccpos[i]] = ecc_calc[i]; /* write OOB buffer to NAND device */ @@ -589,7 +587,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -2449,31 +2594,42 @@ static int nand_write_page_syndrome(struct mtd_info *mtd, +@@ -2449,31 +2594,42 @@ static int nand_write_page_syndrome(stru int eccsteps = chip->cur_ecc->steps; const uint8_t *p = buf; uint8_t *oob = chip->oob_poi; @@ -638,7 +636,7 @@ index 8a5d12e..577cb9e 100644 return 0; } -@@ -2504,6 +2660,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip, +@@ -2504,6 +2660,7 @@ static int nand_write_page(struct mtd_in chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page); @@ -646,7 +644,7 @@ index 8a5d12e..577cb9e 100644 if (unlikely(raw)) status = chip->cur_ecc->write_page_raw(mtd, chip, buf, oob_required); -@@ -2514,6 +2671,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip, +@@ -2514,6 +2671,7 @@ static int nand_write_page(struct mtd_in else status = chip->cur_ecc->write_page(mtd, chip, buf, oob_required); @@ -654,7 +652,7 @@ index 8a5d12e..577cb9e 100644 if (status < 0) return status; -@@ -2803,6 +2961,8 @@ static int panic_nand_part_write(struct mtd_info *mtd, loff_t to, size_t len, +@@ -2803,6 +2961,8 @@ static int panic_nand_part_write(struct panic_nand_get_device(chip, part->master, FL_WRITING); if (part->ecc) chip->cur_ecc = part->ecc; @@ -663,7 +661,7 @@ index 8a5d12e..577cb9e 100644 ops.len = len; ops.datbuf = (uint8_t *)buf; -@@ -2811,6 +2971,7 @@ static int panic_nand_part_write(struct mtd_info *mtd, loff_t to, size_t len, +@@ -2811,6 +2971,7 @@ static int panic_nand_part_write(struct ret = nand_do_write_ops(part->master, to, &ops); @@ -671,7 +669,7 @@ index 8a5d12e..577cb9e 100644 chip->cur_ecc = &chip->ecc; *retlen = ops.retlen; return ret; -@@ -2865,12 +3026,15 @@ static int nand_part_write(struct mtd_info *mtd, loff_t to, size_t len, +@@ -2865,12 +3026,15 @@ static int nand_part_write(struct mtd_in nand_get_device(part->master, FL_WRITING); if (part->ecc) chip->cur_ecc = part->ecc; @@ -687,7 +685,7 @@ index 8a5d12e..577cb9e 100644 chip->cur_ecc = &chip->ecc; nand_release_device(part->master); return ret; -@@ -3032,6 +3196,8 @@ static int nand_part_write_oob(struct mtd_info *mtd, loff_t to, +@@ -3032,6 +3196,8 @@ static int nand_part_write_oob(struct mt nand_get_device(part->master, FL_WRITING); if (part->ecc) chip->cur_ecc = part->ecc; @@ -696,7 +694,7 @@ index 8a5d12e..577cb9e 100644 switch (ops->mode) { case MTD_OPS_PLACE_OOB: -@@ -3049,6 +3215,7 @@ static int nand_part_write_oob(struct mtd_info *mtd, loff_t to, +@@ -3049,6 +3215,7 @@ static int nand_part_write_oob(struct mt ret = nand_do_write_ops(part->master, to, ops); out: @@ -712,11 +710,9 @@ index 8a5d12e..577cb9e 100644 /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */ if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) { -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 4f7ca8d..6cbd06a3 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h -@@ -539,6 +539,64 @@ void nand_page_set_status(struct mtd_info *mtd, int page, +@@ -539,6 +539,64 @@ void nand_page_set_status(struct mtd_inf int nand_pst_create(struct mtd_info *mtd); @@ -807,7 +803,7 @@ index 4f7ca8d..6cbd06a3 100644 void (*release)(struct nand_part *part); }; -@@ -902,6 +965,41 @@ extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, +@@ -902,6 +965,41 @@ extern int nand_erase_nand(struct mtd_in extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, uint8_t *buf); diff --git a/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch b/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch index f4c36ec..f5dfba0 100644 --- a/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch +++ b/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch @@ -12,11 +12,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> include/linux/of_mtd.h | 6 ++++++ 2 files changed, 41 insertions(+) -diff --git a/drivers/of/of_mtd.c b/drivers/of/of_mtd.c -index b7361ed..4e42c26 100644 --- a/drivers/of/of_mtd.c +++ b/drivers/of/of_mtd.c -@@ -84,6 +84,41 @@ int of_get_nand_ecc_strength(struct device_node *np) +@@ -84,6 +84,41 @@ int of_get_nand_ecc_strength(struct devi EXPORT_SYMBOL_GPL(of_get_nand_ecc_strength); /** @@ -58,8 +56,6 @@ index b7361ed..4e42c26 100644 * of_get_nand_bus_width - Get nand bus witdh for given device_node * @np: Pointer to the given device_node * -diff --git a/include/linux/of_mtd.h b/include/linux/of_mtd.h -index e266caa..1059472 100644 --- a/include/linux/of_mtd.h +++ b/include/linux/of_mtd.h @@ -15,6 +15,7 @@ @@ -70,15 +66,15 @@ index e266caa..1059472 100644 int of_get_nand_bus_width(struct device_node *np); bool of_get_nand_on_flash_bbt(struct device_node *np); -@@ -35,6 +36,11 @@ static inline int of_get_nand_ecc_strength(struct device_node *np) +@@ -34,6 +35,11 @@ static inline int of_get_nand_ecc_streng + { return -ENOSYS; } - ++ +static inline int of_get_nand_rnd_mode(struct device_node *np) +{ + return -ENOSYS; +} -+ + static inline int of_get_nand_bus_width(struct device_node *np) { - return -ENOSYS; diff --git a/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch b/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch index ac80156..5a4917c 100644 --- a/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch +++ b/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch @@ -13,11 +13,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> include/linux/mtd/nand.h | 4 ++++ 2 files changed, 11 insertions(+) -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index 577cb9e..51642c6 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -4382,6 +4382,13 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, +@@ -4382,6 +4382,13 @@ ident_done: if (mtd->writesize > 512 && chip->cmdfunc == nand_command) chip->cmdfunc = nand_command_lp; @@ -31,8 +29,6 @@ index 577cb9e..51642c6 100644 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n", *maf_id, *dev_id); -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 6cbd06a3..5844d6f 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -748,6 +748,9 @@ struct nand_chip { diff --git a/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch b/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch index 4430a50..c6554da 100644 --- a/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch +++ b/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch @@ -15,8 +15,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> 4 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 drivers/mtd/nand/nand_hynix.c -diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile -index fcbe032..07b7c8c 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile @@ -5,7 +5,7 @@ @@ -28,9 +26,6 @@ index fcbe032..07b7c8c 100644 obj-$(CONFIG_MTD_SM_COMMON) += sm_common.o obj-$(CONFIG_MTD_NAND_CAFE) += cafe_nand.o -diff --git a/drivers/mtd/nand/nand_hynix.c b/drivers/mtd/nand/nand_hynix.c -new file mode 100644 -index 0000000..0d051bf5 --- /dev/null +++ b/drivers/mtd/nand/nand_hynix.c @@ -0,0 +1,159 @@ @@ -193,11 +188,9 @@ index 0000000..0d051bf5 +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Boris BREZILLON <b.brezillon.dev@gmail.com>"); +MODULE_DESCRIPTION("Hynix NAND specific code"); -diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c -index dd620c1..b786718 100644 --- a/drivers/mtd/nand/nand_ids.c +++ b/drivers/mtd/nand/nand_ids.c -@@ -163,6 +163,7 @@ struct nand_flash_dev nand_flash_ids[] = { +@@ -163,6 +163,7 @@ struct nand_flash_dev nand_flash_ids[] = {NULL} }; @@ -205,7 +198,7 @@ index dd620c1..b786718 100644 /* Manufacturer IDs */ struct nand_manufacturers nand_manuf_ids[] = { {NAND_MFR_TOSHIBA, "Toshiba"}, -@@ -171,7 +172,7 @@ struct nand_manufacturers nand_manuf_ids[] = { +@@ -171,7 +172,7 @@ struct nand_manufacturers nand_manuf_ids {NAND_MFR_NATIONAL, "National"}, {NAND_MFR_RENESAS, "Renesas"}, {NAND_MFR_STMICRO, "ST Micro"}, @@ -214,8 +207,6 @@ index dd620c1..b786718 100644 {NAND_MFR_MICRON, "Micron"}, {NAND_MFR_AMD, "AMD/Spansion"}, {NAND_MFR_MACRONIX, "Macronix"}, -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 5844d6f..328aab2 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -959,6 +959,8 @@ struct nand_manufacturers { diff --git a/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch b/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch index 4ff54d7..278edd4 100644 --- a/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch +++ b/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch @@ -13,8 +13,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> include/linux/mtd/nand.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 328aab2..c20f35b 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -176,17 +176,17 @@ typedef enum { diff --git a/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch b/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch index c92398e..bc428f6 100644 --- a/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch +++ b/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch @@ -22,11 +22,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/nand_base.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index 51642c6..e3d4d8e 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -4063,6 +4063,41 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip, +@@ -4063,6 +4063,41 @@ static void nand_decode_ext_id(struct mt mtd->erasesize = (128 * 1024) << (((extid >> 1) & 0x04) | (extid & 0x03)); *busw = 0; diff --git a/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch b/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch index a150cbf..186ce2e 100644 --- a/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch +++ b/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch @@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/nand_base.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index e3d4d8e..5c6f465 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -4437,9 +4437,11 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, +@@ -4437,9 +4437,11 @@ ident_done: pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, type->name); diff --git a/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch b/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch index 6894cc5..3e293a9 100644 --- a/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch +++ b/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch @@ -12,11 +12,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/nand_base.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index 5c6f465..05ec786 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -4247,7 +4247,7 @@ static inline bool is_full_id_nand(struct nand_flash_dev *type) +@@ -4247,7 +4247,7 @@ static inline bool is_full_id_nand(struc } static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip, @@ -25,7 +23,7 @@ index 5c6f465..05ec786 100644 { if (!strncmp(type->id, id_data, type->id_len)) { mtd->writesize = type->pagesize; -@@ -4273,6 +4273,21 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip, +@@ -4273,6 +4273,21 @@ static bool find_full_id_nand(struct mtd } /* @@ -47,7 +45,7 @@ index 5c6f465..05ec786 100644 * Get the flash and manufacturer id and lookup if the type is supported. */ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, -@@ -4385,8 +4400,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, +@@ -4385,8 +4400,7 @@ ident_done: * Check, if buswidth is correct. Hardware drivers should set * chip correct! */ @@ -57,7 +55,7 @@ index 5c6f465..05ec786 100644 pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name); pr_warn("bus width %d instead %d bit\n", (chip->options & NAND_BUSWIDTH_16) ? 16 : 8, -@@ -4424,8 +4438,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, +@@ -4424,8 +4438,7 @@ ident_done: return ERR_PTR(err); } diff --git a/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch b/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch index d993c9d..f61e4a0 100644 --- a/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch +++ b/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch @@ -12,8 +12,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/sunxi_nand.c | 73 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 65 insertions(+), 9 deletions(-) -diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig -index 8242470..7df88c6 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig @@ -525,6 +525,7 @@ config MTD_NAND_XWAY @@ -24,8 +22,6 @@ index 8242470..7df88c6 100644 help Enables support for NAND Flash chips on Allwinner SoCs. -diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c -index 6f93b29..c3e0473 100644 --- a/drivers/mtd/nand/sunxi_nand.c +++ b/drivers/mtd/nand/sunxi_nand.c @@ -202,6 +202,23 @@ struct sunxi_nand_hw_ecc { @@ -52,7 +48,7 @@ index 6f93b29..c3e0473 100644 * NAND chip structure: stores NAND chip device related information * * @node: used to store NAND chips into a list -@@ -521,7 +538,7 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, +@@ -521,7 +538,7 @@ static int sunxi_nfc_hw_ecc_read_page(st int oob_required, int page) { struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller); @@ -61,7 +57,7 @@ index 6f93b29..c3e0473 100644 struct nand_ecclayout *layout = ecc->layout; struct sunxi_nand_hw_ecc *data = ecc->priv; unsigned int max_bitflips = 0; -@@ -607,7 +624,7 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -607,7 +624,7 @@ static int sunxi_nfc_hw_ecc_write_page(s const uint8_t *buf, int oob_required) { struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller); @@ -70,7 +66,7 @@ index 6f93b29..c3e0473 100644 struct nand_ecclayout *layout = ecc->layout; struct sunxi_nand_hw_ecc *data = ecc->priv; int offset; -@@ -681,7 +698,7 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd, +@@ -681,7 +698,7 @@ static int sunxi_nfc_hw_syndrome_ecc_rea int page) { struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller); @@ -79,7 +75,7 @@ index 6f93b29..c3e0473 100644 struct sunxi_nand_hw_ecc *data = ecc->priv; unsigned int max_bitflips = 0; uint8_t *oob = chip->oob_poi; -@@ -749,7 +766,7 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -749,7 +766,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri int oob_required) { struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller); @@ -88,7 +84,7 @@ index 6f93b29..c3e0473 100644 struct sunxi_nand_hw_ecc *data = ecc->priv; uint8_t *oob = chip->oob_poi; int offset = 0; -@@ -1099,8 +1116,13 @@ static int sunxi_nand_ecc_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc, +@@ -1099,8 +1116,13 @@ static int sunxi_nand_ecc_init(struct mt ecc->strength = nand->ecc_strength_ds; } @@ -104,7 +100,7 @@ index 6f93b29..c3e0473 100644 ecc->mode = NAND_ECC_HW; -@@ -1135,12 +1157,39 @@ static int sunxi_nand_ecc_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc, +@@ -1135,12 +1157,39 @@ static int sunxi_nand_ecc_init(struct mt return 0; } @@ -145,7 +141,7 @@ index 6f93b29..c3e0473 100644 struct mtd_info *mtd; struct nand_chip *nand; int nsels; -@@ -1269,8 +1318,14 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc, +@@ -1269,8 +1318,14 @@ static int sunxi_nand_chip_init(struct d return ret; } diff --git a/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch b/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch index 5d37a38..e169bfa 100644 --- a/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch +++ b/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch @@ -11,8 +11,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/sunxi_nand.c | 603 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 585 insertions(+), 18 deletions(-) -diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c -index c3e0473..2f6ab39 100644 --- a/drivers/mtd/nand/sunxi_nand.c +++ b/drivers/mtd/nand/sunxi_nand.c @@ -206,10 +206,12 @@ struct sunxi_nand_hw_ecc { @@ -28,7 +26,7 @@ index c3e0473..2f6ab39 100644 }; static inline struct sunxi_nand_part * -@@ -219,6 +221,29 @@ to_sunxi_nand_part(struct nand_part *part) +@@ -219,6 +221,29 @@ to_sunxi_nand_part(struct nand_part *par } /* @@ -66,7 +64,7 @@ index c3e0473..2f6ab39 100644 unsigned long clk_rate; int selected; int nsels; -@@ -489,6 +515,185 @@ static void sunxi_nfc_write_buf(struct mtd_info *mtd, const uint8_t *buf, +@@ -489,6 +515,185 @@ static void sunxi_nfc_write_buf(struct m } } @@ -252,7 +250,7 @@ index c3e0473..2f6ab39 100644 static uint8_t sunxi_nfc_read_byte(struct mtd_info *mtd) { uint8_t ret; -@@ -538,16 +743,43 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, +@@ -538,16 +743,43 @@ static int sunxi_nfc_hw_ecc_read_page(st int oob_required, int page) { struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller); @@ -296,7 +294,7 @@ index c3e0473..2f6ab39 100644 tmp = readl(nfc->regs + NFC_REG_ECC_CTL); tmp &= ~(NFC_ECC_MODE | NFC_ECC_PIPELINE | NFC_ECC_BLOCK_SIZE); tmp |= NFC_ECC_EN | (data->mode << NFC_ECC_MODE_SHIFT) | -@@ -556,12 +788,15 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, +@@ -556,12 +788,15 @@ static int sunxi_nfc_hw_ecc_read_page(st writel(tmp, nfc->regs + NFC_REG_ECC_CTL); for (i = 0; i < ecc->steps; i++) { @@ -313,7 +311,7 @@ index c3e0473..2f6ab39 100644 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1); -@@ -569,6 +804,25 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, +@@ -569,6 +804,25 @@ static int sunxi_nfc_hw_ecc_read_page(st if (ret) return ret; @@ -339,7 +337,7 @@ index c3e0473..2f6ab39 100644 tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | (1 << 30); writel(tmp, nfc->regs + NFC_REG_CMD); -@@ -579,6 +833,9 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, +@@ -579,6 +833,9 @@ static int sunxi_nfc_hw_ecc_read_page(st memcpy_fromio(buf + (i * ecc->size), nfc->regs + NFC_RAM0_BASE, ecc->size); @@ -349,7 +347,7 @@ index c3e0473..2f6ab39 100644 if (readl(nfc->regs + NFC_REG_ECC_ST) & 0x1) { mtd->ecc_stats.failed++; } else { -@@ -594,9 +851,10 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, +@@ -594,9 +851,10 @@ static int sunxi_nfc_hw_ecc_read_page(st if (ret) return ret; @@ -362,7 +360,7 @@ index c3e0473..2f6ab39 100644 } } -@@ -606,11 +864,14 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, +@@ -606,11 +864,14 @@ static int sunxi_nfc_hw_ecc_read_page(st offset = mtd->writesize + ecc->layout->oobfree[ecc->steps].offset; chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1); @@ -378,7 +376,7 @@ index c3e0473..2f6ab39 100644 tmp = readl(nfc->regs + NFC_REG_ECC_CTL); tmp &= ~NFC_ECC_EN; -@@ -627,6 +888,7 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -627,6 +888,7 @@ static int sunxi_nfc_hw_ecc_write_page(s struct nand_ecc_ctrl *ecc = chip->cur_ecc; struct nand_ecclayout *layout = ecc->layout; struct sunxi_nand_hw_ecc *data = ecc->priv; @@ -386,7 +384,7 @@ index c3e0473..2f6ab39 100644 int offset; int ret; u32 tmp; -@@ -641,22 +903,56 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -641,22 +903,56 @@ static int sunxi_nfc_hw_ecc_write_page(s writel(tmp, nfc->regs + NFC_REG_ECC_CTL); for (i = 0; i < ecc->steps; i++) { @@ -451,7 +449,7 @@ index c3e0473..2f6ab39 100644 } chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1); -@@ -671,6 +967,9 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -671,6 +967,9 @@ static int sunxi_nfc_hw_ecc_write_page(s ret = sunxi_nfc_wait_int(nfc, NFC_CMD_INT_FLAG, 0); if (ret) return ret; @@ -461,7 +459,7 @@ index c3e0473..2f6ab39 100644 } if (oob_required) { -@@ -679,11 +978,14 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -679,11 +978,14 @@ static int sunxi_nfc_hw_ecc_write_page(s offset = mtd->writesize + ecc->layout->oobfree[i].offset; chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1); @@ -477,7 +475,7 @@ index c3e0473..2f6ab39 100644 tmp = readl(nfc->regs + NFC_REG_ECC_CTL); tmp &= ~NFC_ECC_EN; -@@ -692,22 +994,76 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -692,22 +994,76 @@ static int sunxi_nfc_hw_ecc_write_page(s return 0; } @@ -554,7 +552,7 @@ index c3e0473..2f6ab39 100644 tmp = readl(nfc->regs + NFC_REG_ECC_CTL); tmp &= ~(NFC_ECC_MODE | NFC_ECC_PIPELINE | NFC_ECC_BLOCK_SIZE); tmp |= NFC_ECC_EN | (data->mode << NFC_ECC_MODE_SHIFT) | -@@ -716,7 +1072,17 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd, +@@ -716,7 +1072,17 @@ static int sunxi_nfc_hw_syndrome_ecc_rea writel(tmp, nfc->regs + NFC_REG_ECC_CTL); for (i = 0; i < ecc->steps; i++) { @@ -573,7 +571,7 @@ index c3e0473..2f6ab39 100644 tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | (1 << 30); writel(tmp, nfc->regs + NFC_REG_CMD); -@@ -729,6 +1095,9 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd, +@@ -729,6 +1095,9 @@ static int sunxi_nfc_hw_syndrome_ecc_rea buf += ecc->size; offset += ecc->size; @@ -583,7 +581,7 @@ index c3e0473..2f6ab39 100644 if (readl(nfc->regs + NFC_REG_ECC_ST) & 0x1) { mtd->ecc_stats.failed++; } else { -@@ -739,7 +1108,8 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd, +@@ -739,7 +1108,8 @@ static int sunxi_nfc_hw_syndrome_ecc_rea if (oob_required) { chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1); @@ -593,7 +591,7 @@ index c3e0473..2f6ab39 100644 oob += ecc->bytes + ecc->prepad; } -@@ -750,10 +1120,13 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd, +@@ -750,10 +1120,13 @@ static int sunxi_nfc_hw_syndrome_ecc_rea cnt = mtd->oobsize - (oob - chip->oob_poi); if (cnt > 0) { chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1); @@ -608,7 +606,7 @@ index c3e0473..2f6ab39 100644 writel(readl(nfc->regs + NFC_REG_ECC_CTL) & ~NFC_ECC_EN, nfc->regs + NFC_REG_ECC_CTL); -@@ -768,6 +1141,7 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -768,6 +1141,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller); struct nand_ecc_ctrl *ecc = chip->cur_ecc; struct sunxi_nand_hw_ecc *data = ecc->priv; @@ -616,7 +614,7 @@ index c3e0473..2f6ab39 100644 uint8_t *oob = chip->oob_poi; int offset = 0; int ret; -@@ -783,7 +1157,8 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -783,7 +1157,8 @@ static int sunxi_nfc_hw_syndrome_ecc_wri writel(tmp, nfc->regs + NFC_REG_ECC_CTL); for (i = 0; i < ecc->steps; i++) { @@ -626,7 +624,7 @@ index c3e0473..2f6ab39 100644 offset += ecc->size; /* Fill OOB data in */ -@@ -796,6 +1171,16 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -796,6 +1171,16 @@ static int sunxi_nfc_hw_syndrome_ecc_wri 4); } @@ -643,7 +641,7 @@ index c3e0473..2f6ab39 100644 tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | NFC_ACCESS_DIR | (1 << 30); writel(tmp, nfc->regs + NFC_REG_CMD); -@@ -804,6 +1189,9 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -804,6 +1189,9 @@ static int sunxi_nfc_hw_syndrome_ecc_wri if (ret) return ret; @@ -653,7 +651,7 @@ index c3e0473..2f6ab39 100644 offset += ecc->bytes + ecc->prepad; oob += ecc->bytes + ecc->prepad; } -@@ -812,9 +1200,11 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -812,9 +1200,11 @@ static int sunxi_nfc_hw_syndrome_ecc_wri cnt = mtd->oobsize - (oob - chip->oob_poi); if (cnt > 0) { chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1); @@ -666,7 +664,7 @@ index c3e0473..2f6ab39 100644 tmp = readl(nfc->regs + NFC_REG_ECC_CTL); tmp &= ~NFC_ECC_EN; -@@ -824,6 +1214,128 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -824,6 +1214,128 @@ static int sunxi_nfc_hw_syndrome_ecc_wri return 0; } @@ -795,7 +793,7 @@ index c3e0473..2f6ab39 100644 static int sunxi_nand_chip_set_timings(struct sunxi_nand_chip *chip, const struct nand_sdr_timings *timings) { -@@ -1084,6 +1596,40 @@ static int sunxi_nand_hw_syndrome_ecc_ctrl_init(struct mtd_info *mtd, +@@ -1084,6 +1596,40 @@ static int sunxi_nand_hw_syndrome_ecc_ct return 0; } @@ -836,7 +834,7 @@ index c3e0473..2f6ab39 100644 static void sunxi_nand_ecc_cleanup(struct nand_ecc_ctrl *ecc) { switch (ecc->mode) { -@@ -1175,7 +1721,14 @@ struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master, +@@ -1175,7 +1721,14 @@ struct nand_part *sunxi_ofnandpart_parse if (ret) goto err; @@ -851,7 +849,7 @@ index c3e0473..2f6ab39 100644 return &part->part; -@@ -1300,18 +1853,30 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc, +@@ -1300,18 +1853,30 @@ static int sunxi_nand_chip_init(struct d if (ret) return ret; @@ -882,7 +880,7 @@ index c3e0473..2f6ab39 100644 ret = nand_scan_tail(mtd); if (ret) { dev_err(dev, "nand_scan_tail failed: %d\n", ret); -@@ -1367,6 +1932,8 @@ static void sunxi_nand_chips_cleanup(struct sunxi_nfc *nfc) +@@ -1367,6 +1932,8 @@ static void sunxi_nand_chips_cleanup(str node); nand_release(&chip->mtd); sunxi_nand_ecc_cleanup(&chip->nand.ecc); diff --git a/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch b/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch index 51b0fbf..126998f 100644 --- a/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch +++ b/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch @@ -13,11 +13,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/sunxi_nand.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) -diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c -index 2f6ab39..74f2caf 100644 --- a/drivers/mtd/nand/sunxi_nand.c +++ b/drivers/mtd/nand/sunxi_nand.c -@@ -1711,28 +1711,37 @@ static void sunxi_nand_part_release(struct nand_part *part) +@@ -1711,28 +1711,37 @@ static void sunxi_nand_part_release(stru struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master, struct device_node *pp) { @@ -31,15 +29,16 @@ index 2f6ab39..74f2caf 100644 - ret = sunxi_nand_ecc_init(master, &part->ecc, pp); - if (ret) - goto err; -+ if (of_find_property(pp, "nand-ecc-mode", NULL)) { -+ ret = sunxi_nand_ecc_init(master, &part->ecc, pp); -+ if (ret) -+ goto err; - +- - ret = sunxi_nand_rnd_init(master, &part->rnd, &part->ecc, pp); - if (ret) { - sunxi_nand_ecc_cleanup(&part->ecc); - goto err; ++ if (of_find_property(pp, "nand-ecc-mode", NULL)) { ++ ret = sunxi_nand_ecc_init(master, &part->ecc, pp); ++ if (ret) ++ goto err; ++ + part->part.ecc = &part->ecc; } diff --git a/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch b/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch index 19775eb..25b9359 100644 --- a/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch +++ b/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch @@ -14,11 +14,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> drivers/mtd/nand/sunxi_nand.c | 9 +++++++++ 1 file changed, 9 insertions(+) -diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c -index 74f2caf..72ab770 100644 --- a/drivers/mtd/nand/sunxi_nand.c +++ b/drivers/mtd/nand/sunxi_nand.c -@@ -1853,6 +1853,15 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc, +@@ -1853,6 +1853,15 @@ static int sunxi_nand_chip_init(struct d if (of_get_nand_on_flash_bbt(np)) nand->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB; diff --git a/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch b/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch index 91c6efb..9611720 100644 --- a/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch +++ b/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch @@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun4i-a10.dtsi | 80 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) -diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi -index abea24e..e0a737f 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi -@@ -924,6 +924,86 @@ +@@ -774,6 +774,86 @@ allwinner,drive = <SUN4I_PINCTRL_10_MA>; allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; }; diff --git a/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch b/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch index 290dbb7..3193a6a 100644 --- a/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch +++ b/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch @@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun5i.dtsi | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) -diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi -index f11efb7..1962ec9 100644 --- a/arch/arm/boot/dts/sun5i-a10s.dtsi +++ b/arch/arm/boot/dts/sun5i-a10s.dtsi -@@ -201,6 +201,20 @@ - allwinner,drive = <SUN4I_PINCTRL_30_MA>; - allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; +@@ -656,4 +656,18 @@ + clocks = <&ahb_gates 28>; + }; }; + + nand_cs2_pins_a: nand_cs@2 { @@ -34,15 +32,11 @@ index f11efb7..1962ec9 100644 + allwinner,pull = <0>; + }; }; - - &sram_a { -diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi -index 772f8d8..0dc7c96 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi -@@ -544,6 +544,44 @@ +@@ -528,6 +528,44 @@ allwinner,drive = <SUN4I_PINCTRL_30_MA>; - allwinner,pull = <SUN4I_PINCTRL_PULL_UP>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; }; + + nand_pins_a: nand_base0@0 { diff --git a/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch b/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch index 5720a8b..0f3dc61 100644 --- a/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch +++ b/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch @@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20.dtsi | 80 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index 0d7e600..6ec86c9 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -1164,6 +1164,86 @@ +@@ -978,6 +978,86 @@ allwinner,drive = <SUN4I_PINCTRL_10_MA>; allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; }; diff --git a/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch b/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch index b1a9b07..ff8e093 100644 --- a/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch +++ b/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch @@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+) -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index 6ec86c9..092adc6 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -641,6 +641,17 @@ +@@ -543,6 +543,17 @@ #dma-cells = <2>; }; diff --git a/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch b/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch index d511260..64473a9 100644 --- a/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch +++ b/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch @@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun4i-a10.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+) -diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi -index e0a737f..7cd636d 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi -@@ -514,6 +514,17 @@ +@@ -428,6 +428,17 @@ #dma-cells = <2>; }; diff --git a/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch b/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch index 163130e..5c4e1f1 100644 --- a/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch +++ b/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch @@ -10,11 +10,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun5i.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+) -diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi -index 0dc7c96..801ab01 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi -@@ -353,6 +353,17 @@ +@@ -365,6 +365,17 @@ #dma-cells = <2>; }; diff --git a/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch b/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch index 7276364..6097ce3 100644 --- a/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch +++ b/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch @@ -10,13 +10,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun5i-a13-olinuxino.dts | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) -diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts -index b3c234c..fd1e921 100644 --- a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts +++ b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts -@@ -155,3 +155,62 @@ - status = "okay"; - }; +@@ -201,3 +201,62 @@ + status = "okay"; + }; }; +&nfc { + pinctrl-names = "default"; diff --git a/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch b/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch index b632db1..a7dee13 100644 --- a/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch +++ b/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch @@ -1,10 +1,8 @@ -diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts -index 39a51d5..f35957d 100644 --- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts +++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts -@@ -142,3 +142,60 @@ - status = "okay"; - }; +@@ -245,3 +245,60 @@ + status = "okay"; + }; }; +&nfc { + pinctrl-names = "default"; diff --git a/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch b/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch index 1f742a9..4075a9e 100644 --- a/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch +++ b/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch @@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) -diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts -index 046a84d..a6faca3 100644 --- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts +++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts -@@ -147,3 +147,60 @@ - regulator-max-microvolt = <3000000>; - regulator-name = "avcc"; +@@ -215,3 +215,60 @@ + regulator-max-microvolt = <3000000>; + regulator-name = "avcc"; }; +&nfc { + pinctrl-names = "default"; diff --git a/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch b/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch index b948c20..2464408 100644 --- a/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch +++ b/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch @@ -1,10 +1,8 @@ -diff --git a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts -index b3c234c..fd1e921 100644 --- a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts +++ b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts -@@ -155,3 +155,62 @@ - status = "okay"; - }; +@@ -189,3 +189,62 @@ + status = "okay"; + }; }; +&nfc { + pinctrl-names = "default"; diff --git a/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch b/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch index bb817c1..93eb3eb 100644 --- a/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch +++ b/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch @@ -1,10 +1,8 @@ -diff --git a/arch/arm/boot/dts/sun4i-a10-pcduino.dts b/arch/arm/boot/dts/sun4i-a10-pcduino.dts -index b3c234c..fd1e921 100644 --- a/arch/arm/boot/dts/sun4i-a10-pcduino.dts +++ b/arch/arm/boot/dts/sun4i-a10-pcduino.dts -@@ -155,3 +155,62 @@ - status = "okay"; - }; +@@ -194,3 +194,62 @@ + status = "okay"; + }; }; +&nfc { + pinctrl-names = "default"; diff --git a/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch b/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch index 25418b5..81de87f 100644 --- a/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch +++ b/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch @@ -1,10 +1,8 @@ -diff --git a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts -index b3c234c..fd1e921 100644 --- a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts +++ b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts -@@ -155,3 +155,62 @@ - status = "okay"; - }; +@@ -210,3 +210,62 @@ + status = "okay"; + }; }; +&nfc { + pinctrl-names = "default"; diff --git a/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch b/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch index 9df18a3..ff047fc 100644 --- a/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch +++ b/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch @@ -1,17 +1,15 @@ -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index c2e1232..f561c68 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -3611,6 +3611,8 @@ static inline bool is_full_id_nand(struct nand_flash_dev *type) +@@ -4249,6 +4249,8 @@ static inline bool is_full_id_nand(struc static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip, - struct nand_flash_dev *type, u8 *id_data, int *busw) + struct nand_flash_dev *type, const u8 *id_data, int *busw) { + int mode; + if (!strncmp(type->id, id_data, type->id_len)) { mtd->writesize = type->pagesize; mtd->erasesize = type->erasesize; -@@ -3621,8 +3623,9 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip, +@@ -4259,8 +4261,9 @@ static bool find_full_id_nand(struct mtd chip->options |= type->options; chip->ecc_strength_ds = NAND_ECC_STRENGTH(type); chip->ecc_step_ds = NAND_ECC_STEP(type); @@ -23,11 +21,9 @@ index c2e1232..f561c68 100644 *busw = type->options & NAND_BUSWIDTH_16; -diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c -index 5095a32..72e4135 100644 --- a/drivers/mtd/nand/sunxi_nand.c +++ b/drivers/mtd/nand/sunxi_nand.c -@@ -1083,7 +1083,7 @@ static int sunxi_nand_chip_init_timings(struct sunxi_nand_chip *chip, +@@ -1427,7 +1427,7 @@ static int sunxi_nand_chip_init_timings( mode = onfi_get_async_timing_mode(&chip->nand); if (mode == ONFI_TIMING_MODE_UNKNOWN) { @@ -36,7 +32,7 @@ index 5095a32..72e4135 100644 } else { uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {}; -@@ -1097,9 +1097,10 @@ static int sunxi_nand_chip_init_timings(struct sunxi_nand_chip *chip, +@@ -1441,9 +1441,10 @@ static int sunxi_nand_chip_init_timings( feature); if (ret) return ret; @@ -48,11 +44,9 @@ index 5095a32..72e4135 100644 if (IS_ERR(timings)) return PTR_ERR(timings); -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 3d4ea7e..2eb92a3 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h -@@ -536,6 +536,55 @@ struct nand_buffers { +@@ -612,6 +612,55 @@ struct nand_buffers { uint8_t *databuf; }; @@ -108,7 +102,7 @@ index 3d4ea7e..2eb92a3 100644 /** * struct nand_chip - NAND Private Flash Chip Data * @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the -@@ -600,11 +649,7 @@ struct nand_buffers { +@@ -676,11 +725,7 @@ struct nand_buffers { * @ecc_step_ds: [INTERN] ECC step required by the @ecc_strength_ds, * also from the datasheet. It is the recommended ECC step * size, if known; if unknown, set to zero. @@ -121,7 +115,7 @@ index 3d4ea7e..2eb92a3 100644 * @numchips: [INTERN] number of physical chips * @chipsize: [INTERN] the size of one chip for multichip arrays * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 -@@ -689,7 +734,7 @@ struct nand_chip { +@@ -769,7 +814,7 @@ struct nand_chip { uint8_t bits_per_cell; uint16_t ecc_strength_ds; uint16_t ecc_step_ds; @@ -130,9 +124,9 @@ index 3d4ea7e..2eb92a3 100644 int badblockpos; int badblockbits; -@@ -975,55 +1020,6 @@ static inline int jedec_feature(struct nand_chip *chip) - : 0; - } +@@ -1156,55 +1201,6 @@ struct ofnandpart_data { + int ofnandpart_parse(struct mtd_info *master, + const struct ofnandpart_data *data); -/* - * struct nand_sdr_timings - SDR NAND chip timings diff --git a/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch b/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch index d7a3963..03c7f26 100644 --- a/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch +++ b/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch @@ -1,8 +1,6 @@ -diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c -index f561c68..8e636df 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c -@@ -3624,8 +3624,13 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip, +@@ -4262,8 +4262,13 @@ static bool find_full_id_nand(struct mtd chip->ecc_strength_ds = NAND_ECC_STRENGTH(type); chip->ecc_step_ds = NAND_ECC_STEP(type); @@ -18,11 +16,9 @@ index f561c68..8e636df 100644 *busw = type->options & NAND_BUSWIDTH_16; -diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h -index 2eb92a3..7d9e599 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h -@@ -863,6 +863,7 @@ struct nand_flash_dev { +@@ -988,6 +988,7 @@ struct nand_flash_dev { uint16_t step_ds; } ecc; int onfi_timing_mode_default; diff --git a/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch b/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch index e2f591e..49ec6b0 100644 --- a/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch +++ b/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch @@ -1,5 +1,3 @@ -diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c -index dd620c1..15b4a03 100644 --- a/drivers/mtd/nand/nand_ids.c +++ b/drivers/mtd/nand/nand_ids.c @@ -19,6 +19,49 @@ @@ -52,7 +50,7 @@ index dd620c1..15b4a03 100644 * The chip ID list: * name, device ID, page size, chip size in MiB, eraseblock size, options * -@@ -50,6 +93,10 @@ struct nand_flash_dev nand_flash_ids[] = { +@@ -50,6 +93,10 @@ struct nand_flash_dev nand_flash_ids[] = { .id = {0xad, 0xde, 0x94, 0xda, 0x74, 0xc4} }, SZ_8K, SZ_8K, SZ_2M, 0, 6, 640, NAND_ECC_INFO(40, SZ_1K), 4 }, diff --git a/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch b/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch index 362ed69..8c49dee 100644 --- a/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch +++ b/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch @@ -13,11 +13,9 @@ Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> drivers/mtd/nand/sunxi_nand.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) -diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c -index 72ab770..3668197 100644 --- a/drivers/mtd/nand/sunxi_nand.c +++ b/drivers/mtd/nand/sunxi_nand.c -@@ -904,7 +904,7 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -904,7 +904,7 @@ static int sunxi_nfc_hw_ecc_write_page(s for (i = 0; i < ecc->steps; i++) { bool rndactiv = false; @@ -26,7 +24,7 @@ index 72ab770..3668197 100644 if (i) chip->cmdfunc(mtd, NAND_CMD_RNDIN, i * ecc->size, -1); -@@ -915,15 +915,13 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -915,15 +915,13 @@ static int sunxi_nfc_hw_ecc_write_page(s offset = layout->eccpos[i * ecc->bytes] - 4 + mtd->writesize; /* Fill OOB data in */ @@ -49,7 +47,7 @@ index 72ab770..3668197 100644 if (i) { cnt = ecc->bytes + 4; -@@ -942,12 +940,16 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -942,12 +940,16 @@ static int sunxi_nfc_hw_ecc_write_page(s if (rndactiv) { /* pre randomize to generate FF patterns on the NAND */ if (!i) { @@ -69,7 +67,7 @@ index 72ab770..3668197 100644 } tmp = readl(nfc->regs + NFC_REG_ECC_CTL); tmp &= ~(NFC_RANDOM_DIRECTION | NFC_ECC_EXCEPTION); -@@ -955,6 +957,8 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd, +@@ -955,6 +957,8 @@ static int sunxi_nfc_hw_ecc_write_page(s writel(tmp, nfc->regs + NFC_REG_ECC_CTL); } @@ -78,7 +76,7 @@ index 72ab770..3668197 100644 chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1); ret = sunxi_nfc_wait_cmd_fifo_empty(nfc); -@@ -1164,13 +1168,13 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd, +@@ -1164,13 +1168,13 @@ static int sunxi_nfc_hw_syndrome_ecc_wri /* Fill OOB data in */ if (oob_required) { tmp = 0xffffffff; diff --git a/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch b/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch index 295865b..76bc222 100644 --- a/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch +++ b/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch @@ -22,11 +22,9 @@ Changes in v2: drivers/mmc/host/sunxi-mmc.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) -diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c -index 4d3e1ff..daa90b7 100644 --- a/drivers/mmc/host/sunxi-mmc.c +++ b/drivers/mmc/host/sunxi-mmc.c -@@ -289,6 +289,24 @@ static int sunxi_mmc_init_host(struct mmc_host *mmc) +@@ -289,6 +289,24 @@ static int sunxi_mmc_init_host(struct mm return 0; } @@ -51,7 +49,7 @@ index 4d3e1ff..daa90b7 100644 static void sunxi_mmc_init_idma_des(struct sunxi_mmc_host *host, struct mmc_data *data) { -@@ -383,6 +401,8 @@ static void sunxi_mmc_send_manual_stop(struct sunxi_mmc_host *host, +@@ -383,6 +401,8 @@ static void sunxi_mmc_send_manual_stop(s u32 arg, cmd_val, ri; unsigned long expire = jiffies + msecs_to_jiffies(1000); @@ -60,7 +58,7 @@ index 4d3e1ff..daa90b7 100644 cmd_val = SDXC_START | SDXC_RESP_EXPIRE | SDXC_STOP_ABORT_CMD | SDXC_CHECK_RESPONSE_CRC; -@@ -597,6 +617,11 @@ static int sunxi_mmc_oclk_onoff(struct sunxi_mmc_host *host, u32 oclk_en) +@@ -597,6 +617,11 @@ static int sunxi_mmc_oclk_onoff(struct s { unsigned long expire = jiffies + msecs_to_jiffies(250); u32 rval; @@ -72,17 +70,17 @@ index 4d3e1ff..daa90b7 100644 rval = mmc_readl(host, REG_CLKCR); rval &= ~(SDXC_CARD_CLOCK_ON | SDXC_LOW_POWER_ON); -@@ -785,6 +810,13 @@ static void sunxi_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) +@@ -784,6 +809,13 @@ static void sunxi_mmc_request(struct mmc + mmc_request_done(mmc, mrq); return; } - ++ + ret = sunxi_mmc_wait_card_ready(host); + if (ret) { + mrq->cmd->error = ret; + mmc_request_done(mmc, mrq); + return; + } -+ + if (data) { ret = sunxi_mmc_map_dma(host, data); - if (ret < 0) { diff --git a/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch b/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch index 7ca26b0..f2f799e 100644 --- a/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch +++ b/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch @@ -1,8 +1,6 @@ -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index 6a63f30..f5f384c 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -107,7 +107,7 @@ +@@ -111,7 +111,7 @@ 720000 1200000 528000 1100000 312000 1000000 diff --git a/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch b/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch index 3199cd9..2545f8a 100644 --- a/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch +++ b/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch @@ -9,18 +9,14 @@ to other sun8i family SoCs like the A23. Signed-off-by: Jens Kuske <jenskuske@gmail.com> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> -diff --git a/Documentation/devicetree/bindings/arm/sunxi.txt b/Documentation/devicetree/bindings/arm/sunxi.txt -index 42941fd..3cb4b94 100644 --- a/Documentation/devicetree/bindings/arm/sunxi.txt +++ b/Documentation/devicetree/bindings/arm/sunxi.txt -@@ -9,4 +9,5 @@ using one of the following compatible strings: +@@ -9,4 +9,5 @@ using one of the following compatible st allwinner,sun6i-a31 allwinner,sun7i-a20 allwinner,sun8i-a23 + allwinner,sun8i-h3 allwinner,sun9i-a80 -diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig -index 81502b9..4efe2d4 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig @@ -35,7 +35,7 @@ config MACH_SUN7I @@ -32,8 +28,6 @@ index 81502b9..4efe2d4 100644 default ARCH_SUNXI select ARM_GIC select MFD_SUN6I_PRCM -diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c -index 1bc811a..8270902 100644 --- a/arch/arm/mach-sunxi/sunxi.c +++ b/arch/arm/mach-sunxi/sunxi.c @@ -67,10 +67,12 @@ MACHINE_END @@ -50,6 +44,3 @@ index 1bc811a..8270902 100644 .dt_compat = sun8i_board_dt_compat, .init_late = sunxi_dt_cpufreq_init, MACHINE_END --- -cgit v0.10.2 - diff --git a/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch b/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch index 6610966..df434a4 100644 --- a/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch +++ b/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch @@ -1,8 +1,6 @@ -diff --git a/Documentation/devicetree/bindings/dma/sun6i-dma.txt b/Documentation/devicetree/bindings/dma/sun6i-dma.txt -index 9cdcba24d..d13c136 100644 --- a/Documentation/devicetree/bindings/dma/sun6i-dma.txt +++ b/Documentation/devicetree/bindings/dma/sun6i-dma.txt -@@ -4,7 +4,10 @@ This driver follows the generic DMA bindings defined in dma.txt. +@@ -4,7 +4,10 @@ This driver follows the generic DMA bind Required properties: @@ -14,11 +12,9 @@ index 9cdcba24d..d13c136 100644 - reg: Should contain the registers base address and length - interrupts: Should contain a reference to the interrupt used by this device - clocks: Should contain a reference to the parent AHB clock -diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c -index 11e5365..842ff97 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c -@@ -891,9 +891,21 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = { +@@ -891,9 +891,21 @@ static struct sun6i_dma_config sun8i_a23 .nr_max_vchans = 37, }; diff --git a/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch b/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch index ea1e100..471fb2a 100644 --- a/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch +++ b/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch @@ -55,9 +55,6 @@ Changes from v1: create mode 100644 Documentation/devicetree/bindings/dma/sun4i-dma.txt create mode 100644 drivers/dma/sun4i-dma.c -diff --git a/Documentation/devicetree/bindings/dma/sun4i-dma.txt b/Documentation/devicetree/bindings/dma/sun4i-dma.txt -new file mode 100644 -index 0000000..f1634a2 --- /dev/null +++ b/Documentation/devicetree/bindings/dma/sun4i-dma.txt @@ -0,0 +1,46 @@ @@ -107,11 +104,9 @@ index 0000000..f1634a2 + #address-cells = <1>; + #size-cells = <0>; + }; -diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig -index fd7ac13..12372c2 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig -@@ -443,6 +443,17 @@ config XGENE_DMA +@@ -444,6 +444,17 @@ config XGENE_DMA help Enable support for the APM X-Gene SoC DMA engine. @@ -129,8 +124,6 @@ index fd7ac13..12372c2 100644 config DMA_ENGINE bool -diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile -index 69f77d5..3eba5e9 100644 --- a/drivers/dma/Makefile +++ b/drivers/dma/Makefile @@ -54,3 +54,4 @@ obj-$(CONFIG_NBPFAXI_DMA) += nbpfaxi.o @@ -138,9 +131,6 @@ index 69f77d5..3eba5e9 100644 obj-$(CONFIG_IMG_MDC_DMA) += img-mdc-dma.o obj-$(CONFIG_XGENE_DMA) += xgene-dma.o +obj-$(CONFIG_SUN4I_DMA) += sun4i-dma.o -diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c -new file mode 100644 -index 0000000..a8d55518 --- /dev/null +++ b/drivers/dma/sun4i-dma.c @@ -0,0 +1,1235 @@ diff --git a/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch b/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch index 150be41..f4b1b5c 100644 --- a/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch +++ b/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch @@ -18,8 +18,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> 2 files changed, 250 insertions(+) create mode 100644 drivers/clk/sunxi/clk-a10-pll2.c -diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile -index 058f273..eb36c38 100644 --- a/drivers/clk/sunxi/Makefile +++ b/drivers/clk/sunxi/Makefile @@ -4,6 +4,7 @@ @@ -30,9 +28,6 @@ index 058f273..eb36c38 100644 obj-y += clk-a20-gmac.o obj-y += clk-mod0.o obj-y += clk-sun8i-mbus.o -diff --git a/drivers/clk/sunxi/clk-a10-pll2.c b/drivers/clk/sunxi/clk-a10-pll2.c -new file mode 100644 -index 0000000..bdbf1e9 --- /dev/null +++ b/drivers/clk/sunxi/clk-a10-pll2.c @@ -0,0 +1,249 @@ diff --git a/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch b/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch index 3663610..c19d7a6 100644 --- a/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch +++ b/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch @@ -17,8 +17,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> 2 files changed, 42 insertions(+) create mode 100644 drivers/clk/sunxi/clk-a10-codec.c -diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile -index eb36c38..6fa845e 100644 --- a/drivers/clk/sunxi/Makefile +++ b/drivers/clk/sunxi/Makefile @@ -3,6 +3,7 @@ @@ -29,9 +27,6 @@ index eb36c38..6fa845e 100644 obj-y += clk-a10-hosc.o obj-y += clk-a10-pll2.o obj-y += clk-a20-gmac.o -diff --git a/drivers/clk/sunxi/clk-a10-codec.c b/drivers/clk/sunxi/clk-a10-codec.c -new file mode 100644 -index 0000000..c70acbf --- /dev/null +++ b/drivers/clk/sunxi/clk-a10-codec.c @@ -0,0 +1,41 @@ diff --git a/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch b/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch index 87ec3fe..a638784 100644 --- a/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch +++ b/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch @@ -18,8 +18,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> 2 files changed, 70 insertions(+) create mode 100644 drivers/clk/sunxi/clk-a10-mod1.c -diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile -index 6fa845e..960eeab 100644 --- a/drivers/clk/sunxi/Makefile +++ b/drivers/clk/sunxi/Makefile @@ -5,6 +5,7 @@ @@ -30,9 +28,6 @@ index 6fa845e..960eeab 100644 obj-y += clk-a10-pll2.o obj-y += clk-a20-gmac.o obj-y += clk-mod0.o -diff --git a/drivers/clk/sunxi/clk-a10-mod1.c b/drivers/clk/sunxi/clk-a10-mod1.c -new file mode 100644 -index 0000000..1357641 --- /dev/null +++ b/drivers/clk/sunxi/clk-a10-mod1.c @@ -0,0 +1,69 @@ diff --git a/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch b/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch index 0d3de3c..f7ddfa1 100644 --- a/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch +++ b/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch @@ -17,11 +17,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20.dtsi | 8 ++++++++ 3 files changed, 24 insertions(+) -diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi -index 30f663a..fab13af 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi -@@ -195,6 +195,14 @@ +@@ -162,6 +162,14 @@ clock-output-names = "pll1"; }; @@ -36,11 +34,9 @@ index 30f663a..fab13af 100644 pll4: clk@01c20018 { #clock-cells = <0>; compatible = "allwinner,sun4i-a10-pll1-clk"; -diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi -index 53d3ead..a4b6a66 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi -@@ -102,6 +102,14 @@ +@@ -136,6 +136,14 @@ clock-output-names = "pll1"; }; @@ -55,11 +51,9 @@ index 53d3ead..a4b6a66 100644 pll4: clk@01c20018 { #clock-cells = <0>; compatible = "allwinner,sun4i-a10-pll1-clk"; -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index 7549f1b..12d9ffd 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -199,6 +199,14 @@ +@@ -203,6 +203,14 @@ clock-output-names = "pll1"; }; diff --git a/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch b/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch index 05ddd4b..d80eae7 100644 --- a/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch +++ b/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch @@ -17,11 +17,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20.dtsi | 8 ++++++++ 3 files changed, 24 insertions(+) -diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi -index fab13af..abea24e 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi -@@ -454,6 +454,14 @@ +@@ -420,6 +420,14 @@ clocks = <&osc24M>, <&pll6 1>, <&pll5 1>; clock-output-names = "spi3"; }; @@ -36,11 +34,9 @@ index fab13af..abea24e 100644 }; soc@01c00000 { -diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi -index a4b6a66..5c0edd6 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi -@@ -292,6 +292,14 @@ +@@ -350,6 +350,14 @@ clock-output-names = "usb_ohci0", "usb_phy"; }; @@ -55,11 +51,9 @@ index a4b6a66..5c0edd6 100644 mbus_clk: clk@01c2015c { #clock-cells = <0>; compatible = "allwinner,sun5i-a13-mbus-clk"; -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index 12d9ffd..400e696 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -468,6 +468,14 @@ +@@ -464,6 +464,14 @@ clock-output-names = "spi3"; }; diff --git a/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch b/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch index 5727c56..38f7856 100644 --- a/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch +++ b/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch @@ -15,11 +15,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20.dtsi | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index 400e696..a0d18b2 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -450,6 +450,29 @@ +@@ -447,6 +447,29 @@ clock-output-names = "ir1"; }; @@ -48,8 +46,8 @@ index 400e696..a0d18b2 100644 + }; usb_clk: clk@01c200cc { #clock-cells = <1>; - #reset-cells = <1>; -@@ -468,6 +491,22 @@ + #reset-cells = <1>; +@@ -464,6 +487,22 @@ clock-output-names = "spi3"; }; diff --git a/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch b/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch index 223993f..79a93f5 100644 --- a/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch +++ b/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch @@ -8,11 +8,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index a0d18b2..1cced70 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -470,7 +470,7 @@ +@@ -467,7 +467,7 @@ #clock-cells = <0>; compatible = "allwinner,sun4i-a10-mod1-clk"; reg = <0x01c200c0 0x4>; diff --git a/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch b/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch index a83cda2..b73884f 100644 --- a/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch +++ b/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch @@ -20,8 +20,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> create mode 100644 sound/soc/sunxi/Makefile create mode 100644 sound/soc/sunxi/sunxi-codec.c -diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig -index 3ba52da..87dbf48 100644 --- a/sound/soc/Kconfig +++ b/sound/soc/Kconfig @@ -53,6 +53,7 @@ source "sound/soc/samsung/Kconfig" @@ -32,8 +30,6 @@ index 3ba52da..87dbf48 100644 source "sound/soc/tegra/Kconfig" source "sound/soc/txx9/Kconfig" source "sound/soc/ux500/Kconfig" -diff --git a/sound/soc/Makefile b/sound/soc/Makefile -index 974ba70..39011b8 100644 --- a/sound/soc/Makefile +++ b/sound/soc/Makefile @@ -34,6 +34,7 @@ obj-$(CONFIG_SND_SOC) += samsung/ @@ -44,9 +40,6 @@ index 974ba70..39011b8 100644 obj-$(CONFIG_SND_SOC) += tegra/ obj-$(CONFIG_SND_SOC) += txx9/ obj-$(CONFIG_SND_SOC) += ux500/ -diff --git a/sound/soc/sunxi/Kconfig b/sound/soc/sunxi/Kconfig -new file mode 100644 -index 0000000..79511ae --- /dev/null +++ b/sound/soc/sunxi/Kconfig @@ -0,0 +1,10 @@ @@ -60,17 +53,11 @@ index 0000000..79511ae + default y + +endmenu -diff --git a/sound/soc/sunxi/Makefile b/sound/soc/sunxi/Makefile -new file mode 100644 -index 0000000..b8950d3 --- /dev/null +++ b/sound/soc/sunxi/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_SND_SUNXI_SOC_CODEC) += sunxi-codec.o + -diff --git a/sound/soc/sunxi/sunxi-codec.c b/sound/soc/sunxi/sunxi-codec.c -new file mode 100644 -index 0000000..67f978e --- /dev/null +++ b/sound/soc/sunxi/sunxi-codec.c @@ -0,0 +1,802 @@ diff --git a/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch b/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch index 120220c..b3668de 100644 --- a/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch +++ b/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch @@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> sound/soc/sunxi/sunxi-codec.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) -diff --git a/sound/soc/sunxi/sunxi-codec.c b/sound/soc/sunxi/sunxi-codec.c -index 67f978e..77a191b 100644 --- a/sound/soc/sunxi/sunxi-codec.c +++ b/sound/soc/sunxi/sunxi-codec.c -@@ -215,9 +215,6 @@ static int sunxi_codec_prepare(struct snd_pcm_substream *substream, +@@ -215,9 +215,6 @@ static int sunxi_codec_prepare(struct sn regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 0x1 << SUNXI_DAC_FIFOC_FIR_VERSION, 0x1 << SUNXI_DAC_FIFOC_FIR_VERSION); } @@ -25,7 +23,7 @@ index 67f978e..77a191b 100644 /* send last sample when DAC FIFO under run */ regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 0x1 << SUNXI_DAC_FIFOC_SEND_LASAT, 0x0 << SUNXI_DAC_FIFOC_SEND_LASAT); } else { -@@ -329,6 +326,7 @@ static int sunxi_codec_hw_params(struct snd_pcm_substream *substream, +@@ -329,6 +326,7 @@ static int sunxi_codec_hw_params(struct regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 7 << SUNXI_DAC_FIFOC_DAC_FS, hwrate << SUNXI_DAC_FIFOC_DAC_FS); regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 1 << SUNXI_DAC_FIFOC_MONO_EN, is_mono << SUNXI_DAC_FIFOC_MONO_EN); regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 1 << SUNXI_DAC_FIFOC_TX_SAMPLE_BITS, is_24bit << SUNXI_DAC_FIFOC_TX_SAMPLE_BITS); diff --git a/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch b/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch index 8500e9d..43997e1 100644 --- a/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch +++ b/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch @@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+) -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -index 1cced70..a99bbae 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -1214,6 +1214,18 @@ +@@ -1182,6 +1182,18 @@ status = "disabled"; }; diff --git a/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch b/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch index c59f61b..8b4dbe4 100644 --- a/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch +++ b/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch @@ -1,7 +1,6 @@ -diff -ruN old/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts new/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts ---- old/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts 2015-07-10 18:50:06.000000000 +0200 -+++ new/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts 2015-08-02 11:45:06.000000000 +0200 -@@ -245,3 +245,10 @@ +--- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts ++++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts +@@ -302,3 +302,10 @@ }; }; diff --git a/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch b/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch index 0f54548..e296638 100644 --- a/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch +++ b/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch @@ -8,13 +8,11 @@ Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 7 +++++++ 1 file changed, 7 insertions(+) -diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts -index 39a51d5..5f9f0b9 100644 --- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts +++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts -@@ -84,6 +84,13 @@ - status = "okay"; - }; +@@ -180,6 +180,13 @@ + + #include "axp209.dtsi" +&codec { + routing = diff --git a/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch b/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch index 7dc0b10..afa42e1 100644 --- a/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch +++ b/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch @@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 7 +++++++ 1 file changed, 7 insertions(+) -diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts -index 4611e2f..d05e06d 100644 --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts -@@ -105,6 +105,13 @@ - status = "okay"; - }; +@@ -257,6 +257,13 @@ + + #include "axp209.dtsi" +&codec { + routing = diff --git a/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch b/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch index 5fc9e5a..c90156d 100644 --- a/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch +++ b/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch @@ -26,9 +26,6 @@ Signed-off-by: Felipe Balbi <balbi@ti.com> create mode 100644 Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt create mode 100644 drivers/usb/musb/sunxi.c -diff --git a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt -new file mode 100644 -index 0000000..9254a6c --- /dev/null +++ b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt @@ -0,0 +1,27 @@ @@ -59,8 +56,6 @@ index 0000000..9254a6c + extcon = <&usbphy 0>; + status = "disabled"; + }; -diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig -index 39db8b6..37081ed 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig @@ -5,7 +5,7 @@ @@ -97,11 +92,9 @@ index 39db8b6..37081ed 100644 config USB_MUSB_DAVINCI tristate "DaVinci" depends on ARCH_DAVINCI_DMx -diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile -index ba49501..f95befe 100644 --- a/drivers/usb/musb/Makefile +++ b/drivers/usb/musb/Makefile -@@ -20,6 +20,7 @@ obj-$(CONFIG_USB_MUSB_DA8XX) += da8xx.o +@@ -20,6 +20,7 @@ obj-$(CONFIG_USB_MUSB_DA8XX) += da8xx. obj-$(CONFIG_USB_MUSB_BLACKFIN) += blackfin.o obj-$(CONFIG_USB_MUSB_UX500) += ux500.o obj-$(CONFIG_USB_MUSB_JZ4740) += jz4740.o @@ -109,9 +102,6 @@ index ba49501..f95befe 100644 obj-$(CONFIG_USB_MUSB_AM335X_CHILD) += musb_am335x.o -diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c -new file mode 100644 -index 0000000..00d7248 --- /dev/null +++ b/drivers/usb/musb/sunxi.c @@ -0,0 +1,703 @@ diff --git a/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch b/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch index 374dbc4..af958f2 100644 --- a/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch +++ b/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch @@ -15,11 +15,9 @@ Signed-off-by: Felipe Balbi <balbi@ti.com> drivers/usb/musb/sunxi.c | 50 +++++++++++++++++++--- 2 files changed, 46 insertions(+), 7 deletions(-) -diff --git a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt -index 9254a6c..fde180b 100644 --- a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt +++ b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt -@@ -2,9 +2,10 @@ Allwinner sun4i A10 musb DRC/OTG controller +@@ -2,9 +2,10 @@ Allwinner sun4i A10 musb DRC/OTG control ------------------------------------------- Required properties: @@ -31,8 +29,6 @@ index 9254a6c..fde180b 100644 - interrupts : interrupt to which the musb controller is connected - interrupt-names : must be "mc" - phys : phy specifier for the otg phy -diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c -index 00d7248..df2f75e 100644 --- a/drivers/usb/musb/sunxi.c +++ b/drivers/usb/musb/sunxi.c @@ -26,6 +26,7 @@ @@ -60,7 +56,7 @@ index 00d7248..df2f75e 100644 struct phy *phy; struct platform_device *usb_phy; struct usb_phy *xceiv; -@@ -229,14 +233,22 @@ static int sunxi_musb_init(struct musb *musb) +@@ -229,14 +233,22 @@ static int sunxi_musb_init(struct musb * musb->phy = glue->phy; musb->xceiv = glue->xceiv; @@ -86,7 +82,7 @@ index 00d7248..df2f75e 100644 writeb(SUNXI_MUSB_VEND0_PIO_MODE, musb->mregs + SUNXI_MUSB_VEND0); /* Register notifier before calling phy_init() */ -@@ -244,7 +256,7 @@ static int sunxi_musb_init(struct musb *musb) +@@ -244,7 +256,7 @@ static int sunxi_musb_init(struct musb * ret = extcon_register_notifier(glue->extcon, EXTCON_USB_HOST, &glue->host_nb); if (ret) @@ -95,7 +91,7 @@ index 00d7248..df2f75e 100644 } ret = phy_init(glue->phy); -@@ -273,10 +285,14 @@ static int sunxi_musb_init(struct musb *musb) +@@ -273,10 +285,14 @@ error_unregister_notifier: if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST, &glue->host_nb); @@ -111,7 +107,7 @@ index 00d7248..df2f75e 100644 return ret; } -@@ -296,8 +312,12 @@ static int sunxi_musb_exit(struct musb *musb) +@@ -296,8 +312,12 @@ static int sunxi_musb_exit(struct musb * extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST, &glue->host_nb); @@ -125,7 +121,7 @@ index 00d7248..df2f75e 100644 return 0; } -@@ -617,6 +637,12 @@ static int sunxi_musb_probe(struct platform_device *pdev) +@@ -617,6 +637,12 @@ static int sunxi_musb_probe(struct platf INIT_WORK(&glue->work, sunxi_musb_work); glue->host_nb.notifier_call = sunxi_musb_host_notifier; @@ -138,7 +134,7 @@ index 00d7248..df2f75e 100644 glue->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(glue->clk)) { dev_err(&pdev->dev, "Error getting clock: %ld\n", -@@ -624,6 +650,17 @@ static int sunxi_musb_probe(struct platform_device *pdev) +@@ -624,6 +650,17 @@ static int sunxi_musb_probe(struct platf return PTR_ERR(glue->clk); } @@ -156,7 +152,7 @@ index 00d7248..df2f75e 100644 glue->phy = devm_phy_get(&pdev->dev, "usb"); if (IS_ERR(glue->phy)) { if (PTR_ERR(glue->phy) == -EPROBE_DEFER) -@@ -685,6 +722,7 @@ static int sunxi_musb_remove(struct platform_device *pdev) +@@ -685,6 +722,7 @@ static int sunxi_musb_remove(struct plat static const struct of_device_id sunxi_musb_match[] = { { .compatible = "allwinner,sun4i-a10-musb", }, diff --git a/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch b/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch index 8a6ac48..5ce12f3 100644 --- a/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch +++ b/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch @@ -1,8 +1,6 @@ -Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20.dtsi -=================================================================== ---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20.dtsi -+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -679,6 +679,14 @@ +--- a/arch/arm/boot/dts/sun7i-a20.dtsi ++++ b/arch/arm/boot/dts/sun7i-a20.dtsi +@@ -745,6 +745,14 @@ status = "disabled"; }; diff --git a/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch b/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch index 5478e64..ab1879d 100644 --- a/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch +++ b/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch @@ -15,11 +15,9 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> arch/arm/boot/dts/sun4i-a10.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+) -diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi -index 61c03d1..551e3d1 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi -@@ -643,6 +643,14 @@ +@@ -591,6 +591,14 @@ status = "disabled"; }; diff --git a/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch b/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch index de5be3d..1b66c97 100644 --- a/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch +++ b/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch @@ -27,11 +27,9 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> create mode 100644 drivers/crypto/sunxi-ss/sun4i-ss-hash.c create mode 100644 drivers/crypto/sunxi-ss/sun4i-ss.h -diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig -index 4044125..07bc7aa 100644 --- a/drivers/crypto/Kconfig +++ b/drivers/crypto/Kconfig -@@ -480,4 +480,21 @@ config CRYPTO_DEV_IMGTEC_HASH +@@ -460,4 +460,21 @@ config CRYPTO_DEV_IMGTEC_HASH hardware hash accelerator. Supporting MD5/SHA1/SHA224/SHA256 hashing algorithms. @@ -53,26 +51,18 @@ index 4044125..07bc7aa 100644 + will be called sun4i-ss. + endif # CRYPTO_HW -diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile -index e35c07a..c3ced6f 100644 --- a/drivers/crypto/Makefile +++ b/drivers/crypto/Makefile -@@ -28,3 +28,4 @@ obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/ +@@ -27,3 +27,4 @@ obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/ obj-$(CONFIG_CRYPTO_DEV_QAT) += qat/ obj-$(CONFIG_CRYPTO_DEV_QCE) += qce/ obj-$(CONFIG_CRYPTO_DEV_VMX) += vmx/ +obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sunxi-ss/ -diff --git a/drivers/crypto/sunxi-ss/Makefile b/drivers/crypto/sunxi-ss/Makefile -new file mode 100644 -index 0000000..8f4c7a2 --- /dev/null +++ b/drivers/crypto/sunxi-ss/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sun4i-ss.o +sun4i-ss-y += sun4i-ss-core.o sun4i-ss-hash.o sun4i-ss-cipher.o -diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c -new file mode 100644 -index 0000000..e070c31 --- /dev/null +++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c @@ -0,0 +1,542 @@ @@ -618,9 +608,6 @@ index 0000000..e070c31 + memcpy(op->key, key, keylen); + return 0; +} -diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-core.c b/drivers/crypto/sunxi-ss/sun4i-ss-core.c -new file mode 100644 -index 0000000..0b79b58 --- /dev/null +++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c @@ -0,0 +1,403 @@ @@ -1027,9 +1014,6 @@ index 0000000..0b79b58 +MODULE_DESCRIPTION("Allwinner Security System cryptographic accelerator"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Corentin LABBE <clabbe.montjoie@gmail.com>"); -diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-hash.c b/drivers/crypto/sunxi-ss/sun4i-ss-hash.c -new file mode 100644 -index 0000000..ff80314 --- /dev/null +++ b/drivers/crypto/sunxi-ss/sun4i-ss-hash.c @@ -0,0 +1,492 @@ @@ -1525,9 +1509,6 @@ index 0000000..ff80314 + + return sun4i_hash_final(areq); +} -diff --git a/drivers/crypto/sunxi-ss/sun4i-ss.h b/drivers/crypto/sunxi-ss/sun4i-ss.h -new file mode 100644 -index 0000000..db18b255 --- /dev/null +++ b/drivers/crypto/sunxi-ss/sun4i-ss.h @@ -0,0 +1,199 @@ diff --git a/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch b/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch index d47cc0b..0322387 100644 --- a/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch +++ b/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch @@ -10,10 +10,8 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts | 11 +++++++++++ 2 files changed, 22 insertions(+) -Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts -=================================================================== ---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-cubietruck.dts -+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts +--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts ++++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts @@ -71,12 +71,23 @@ }; @@ -38,10 +36,8 @@ Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts }; usbphy: phy@01c13400 { -Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts -=================================================================== ---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts -+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts +--- a/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts ++++ b/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts @@ -69,12 +69,23 @@ }; diff --git a/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch b/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch index ca09504..ae5576f 100644 --- a/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch +++ b/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch @@ -14,10 +14,8 @@ GPIO, but this is not supported in this patch. arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) -Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts -=================================================================== ---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-cubietruck.dts -+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts +--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts ++++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts @@ -88,6 +88,20 @@ interrupts = <10 8>; /* PH10 / EINT10 */ interrupt-names = "host-wake"; diff --git a/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch b/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch index e60aece..83de5fd 100644 --- a/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch +++ b/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch @@ -1,7 +1,5 @@ -Index: linux-4.1.3/arch/arm/boot/dts/Makefile -=================================================================== ---- linux-4.1.3.orig/arch/arm/boot/dts/Makefile -+++ linux-4.1.3/arch/arm/boot/dts/Makefile +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile @@ -554,6 +554,7 @@ dtb-$(CONFIG_MACH_SUN7I) += \ sun7i-a20-cubietruck.dtb \ sun7i-a20-hummingbird.dtb \ @@ -10,10 +8,8 @@ Index: linux-4.1.3/arch/arm/boot/dts/Makefile sun7i-a20-m3.dtb \ sun7i-a20-olinuxino-lime.dtb \ sun7i-a20-olinuxino-lime2.dtb \ -Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts -=================================================================== --- /dev/null -+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts ++++ b/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts @@ -0,0 +1,235 @@ +/* + * Copyright 2015 Daniel Golle <daniel@makrotopia.org> |