6bf179b270
Switch to the mainline Lantiq PCIe PHY driver and update the vr9.dtsi accordingly. The Lantiq IRQ SMP support added upstream required changes to the SoC dtsi as well. Following changes are made to the Lantiq kernel patches: 0005-lantiq_etop-pass-struct-device-to-DMA-API-functions.patch 0006-MIPS-lantiq-pass-struct-device-to-DMA-API-functions.patch applied upstream 0008-MIPS-lantiq-backport-old-timer-code.patch access_ok API update because it lost it's type (which was the first) parameter in upstream commit 96d4f267e40f95 ("Remove 'type' argument from access_ok() function") 0024-MIPS-lantiq-autoselect-soc-rev-matching-fw.patch merged into 0026-MIPS-lantiq-Add-GPHY-Firmware-loader.patch 0024-MIPS-lantiq-revert-DSA-switch-driver-PMU-clock-chang.patch revert upstream changes required for upstream xrx200 ethernet and xrx200 (DSA) switch driver but breaking our driver 0026-MIPS-lantiq-Add-GPHY-Firmware-loader.patch required for our driver but dropped upstream, add former upstream version 0028-NET-lantiq-various-etop-fixes.patch now has to use the phy_set_max_speed API instead of modifying phydev->supported. Also call ltq_dma_enable_irq() in ltq_etop_open() based on upstream commit cc973aecf0b054 ("MIPS: lantiq: Do not enable IRQs in dma open") Signed-off-by: Mathias Kresin <dev@kresin.me> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
94 lines
2.2 KiB
Diff
94 lines
2.2 KiB
Diff
--- a/drivers/mtd/parsers/ofpart.c
|
|
+++ b/drivers/mtd/parsers/ofpart.c
|
|
@@ -21,6 +21,38 @@ static bool node_has_compatible(struct d
|
|
return of_get_property(pp, "compatible", NULL);
|
|
}
|
|
|
|
+static uint8_t * brnboot_get_selected_root_part(struct mtd_info *master,
|
|
+ loff_t offset)
|
|
+{
|
|
+ static uint8_t root_id;
|
|
+ int err, len;
|
|
+
|
|
+ err = mtd_read(master, offset, 0x01, &len, &root_id);
|
|
+
|
|
+ if (mtd_is_bitflip(err) || !err)
|
|
+ return &root_id;
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+static void brnboot_set_active_root_part(struct mtd_partition *pparts,
|
|
+ struct device_node **part_nodes,
|
|
+ int nr_parts,
|
|
+ uint8_t *root_id)
|
|
+{
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < nr_parts; i++) {
|
|
+ int part_root_id;
|
|
+
|
|
+ if (!of_property_read_u32(part_nodes[i], "brnboot,root-id", &part_root_id)
|
|
+ && part_root_id == *root_id) {
|
|
+ pparts[i].name = "firmware";
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
static int parse_fixed_partitions(struct mtd_info *master,
|
|
const struct mtd_partition **pparts,
|
|
struct mtd_part_parser_data *data)
|
|
@@ -32,7 +64,8 @@ static int parse_fixed_partitions(struct
|
|
struct device_node *pp;
|
|
int nr_parts, i, ret = 0;
|
|
bool dedicated = true;
|
|
-
|
|
+ uint8_t *proot_id = NULL;
|
|
+ struct device_node **part_nodes;
|
|
|
|
/* Pull of_node from the master device node */
|
|
mtd_node = mtd_get_of_node(master);
|
|
@@ -68,7 +101,9 @@ static int parse_fixed_partitions(struct
|
|
return 0;
|
|
|
|
parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL);
|
|
- if (!parts)
|
|
+ part_nodes = kcalloc(nr_parts, sizeof(*part_nodes), GFP_KERNEL);
|
|
+
|
|
+ if (!parts || !part_nodes)
|
|
return -ENOMEM;
|
|
|
|
i = 0;
|
|
@@ -117,12 +152,22 @@ static int parse_fixed_partitions(struct
|
|
if (of_get_property(pp, "lock", &len))
|
|
parts[i].mask_flags |= MTD_POWERUP_LOCK;
|
|
|
|
+ if (!proot_id && of_device_is_compatible(pp, "brnboot,root-selector"))
|
|
+ proot_id = brnboot_get_selected_root_part(master, parts[i].offset);
|
|
+
|
|
+ part_nodes[i] = pp;
|
|
+
|
|
i++;
|
|
}
|
|
|
|
if (!nr_parts)
|
|
goto ofpart_none;
|
|
|
|
+ if (proot_id)
|
|
+ brnboot_set_active_root_part(parts, part_nodes, nr_parts, proot_id);
|
|
+
|
|
+ kfree(part_nodes);
|
|
+
|
|
*pparts = parts;
|
|
return nr_parts;
|
|
|
|
@@ -133,6 +178,7 @@ ofpart_fail:
|
|
ofpart_none:
|
|
of_node_put(pp);
|
|
kfree(parts);
|
|
+ kfree(part_nodes);
|
|
return ret;
|
|
}
|
|
|