diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/amba/bus.c | 5 | ||||
-rw-r--r-- | drivers/mmc/host/mmci.c | 25 | ||||
-rw-r--r-- | drivers/of/fdt.c | 8 | ||||
-rw-r--r-- | drivers/tty/serial/atmel_serial.c | 2 |
4 files changed, 33 insertions, 7 deletions
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c index 7025593a58c8..d74926e0939e 100644 --- a/drivers/amba/bus.c +++ b/drivers/amba/bus.c | |||
@@ -603,6 +603,10 @@ int amba_device_register(struct amba_device *dev, struct resource *parent) | |||
603 | if (ret) | 603 | if (ret) |
604 | goto err_out; | 604 | goto err_out; |
605 | 605 | ||
606 | /* Hard-coded primecell ID instead of plug-n-play */ | ||
607 | if (dev->periphid != 0) | ||
608 | goto skip_probe; | ||
609 | |||
606 | /* | 610 | /* |
607 | * Dynamically calculate the size of the resource | 611 | * Dynamically calculate the size of the resource |
608 | * and use this for iomap | 612 | * and use this for iomap |
@@ -643,6 +647,7 @@ int amba_device_register(struct amba_device *dev, struct resource *parent) | |||
643 | if (ret) | 647 | if (ret) |
644 | goto err_release; | 648 | goto err_release; |
645 | 649 | ||
650 | skip_probe: | ||
646 | ret = device_add(&dev->dev); | 651 | ret = device_add(&dev->dev); |
647 | if (ret) | 652 | if (ret) |
648 | goto err_release; | 653 | goto err_release; |
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 4941e06fe2e1..5da5bea0f9f0 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c | |||
@@ -51,6 +51,7 @@ static unsigned int fmax = 515633; | |||
51 | * is asserted (likewise for RX) | 51 | * is asserted (likewise for RX) |
52 | * @sdio: variant supports SDIO | 52 | * @sdio: variant supports SDIO |
53 | * @st_clkdiv: true if using a ST-specific clock divider algorithm | 53 | * @st_clkdiv: true if using a ST-specific clock divider algorithm |
54 | * @blksz_datactrl16: true if Block size is at b16..b30 position in datactrl register | ||
54 | */ | 55 | */ |
55 | struct variant_data { | 56 | struct variant_data { |
56 | unsigned int clkreg; | 57 | unsigned int clkreg; |
@@ -60,6 +61,7 @@ struct variant_data { | |||
60 | unsigned int fifohalfsize; | 61 | unsigned int fifohalfsize; |
61 | bool sdio; | 62 | bool sdio; |
62 | bool st_clkdiv; | 63 | bool st_clkdiv; |
64 | bool blksz_datactrl16; | ||
63 | }; | 65 | }; |
64 | 66 | ||
65 | static struct variant_data variant_arm = { | 67 | static struct variant_data variant_arm = { |
@@ -92,6 +94,17 @@ static struct variant_data variant_ux500 = { | |||
92 | .st_clkdiv = true, | 94 | .st_clkdiv = true, |
93 | }; | 95 | }; |
94 | 96 | ||
97 | static struct variant_data variant_ux500v2 = { | ||
98 | .fifosize = 30 * 4, | ||
99 | .fifohalfsize = 8 * 4, | ||
100 | .clkreg = MCI_CLK_ENABLE, | ||
101 | .clkreg_enable = MCI_ST_UX500_HWFCEN, | ||
102 | .datalength_bits = 24, | ||
103 | .sdio = true, | ||
104 | .st_clkdiv = true, | ||
105 | .blksz_datactrl16 = true, | ||
106 | }; | ||
107 | |||
95 | /* | 108 | /* |
96 | * This must be called with host->lock held | 109 | * This must be called with host->lock held |
97 | */ | 110 | */ |
@@ -465,7 +478,10 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data) | |||
465 | blksz_bits = ffs(data->blksz) - 1; | 478 | blksz_bits = ffs(data->blksz) - 1; |
466 | BUG_ON(1 << blksz_bits != data->blksz); | 479 | BUG_ON(1 << blksz_bits != data->blksz); |
467 | 480 | ||
468 | datactrl = MCI_DPSM_ENABLE | blksz_bits << 4; | 481 | if (variant->blksz_datactrl16) |
482 | datactrl = MCI_DPSM_ENABLE | (data->blksz << 16); | ||
483 | else | ||
484 | datactrl = MCI_DPSM_ENABLE | blksz_bits << 4; | ||
469 | 485 | ||
470 | if (data->flags & MMC_DATA_READ) | 486 | if (data->flags & MMC_DATA_READ) |
471 | datactrl |= MCI_DPSM_DIRECTION; | 487 | datactrl |= MCI_DPSM_DIRECTION; |
@@ -1311,9 +1327,14 @@ static struct amba_id mmci_ids[] = { | |||
1311 | }, | 1327 | }, |
1312 | { | 1328 | { |
1313 | .id = 0x00480180, | 1329 | .id = 0x00480180, |
1314 | .mask = 0x00ffffff, | 1330 | .mask = 0xf0ffffff, |
1315 | .data = &variant_ux500, | 1331 | .data = &variant_ux500, |
1316 | }, | 1332 | }, |
1333 | { | ||
1334 | .id = 0x10480180, | ||
1335 | .mask = 0xf0ffffff, | ||
1336 | .data = &variant_ux500v2, | ||
1337 | }, | ||
1317 | { 0, 0 }, | 1338 | { 0, 0 }, |
1318 | }; | 1339 | }; |
1319 | 1340 | ||
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 8b63a691a9ed..65200af29c52 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c | |||
@@ -670,7 +670,7 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname, | |||
670 | 670 | ||
671 | pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); | 671 | pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); |
672 | 672 | ||
673 | if (depth != 1 || | 673 | if (depth != 1 || !data || |
674 | (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0)) | 674 | (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0)) |
675 | return 0; | 675 | return 0; |
676 | 676 | ||
@@ -679,16 +679,16 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname, | |||
679 | /* Retrieve command line */ | 679 | /* Retrieve command line */ |
680 | p = of_get_flat_dt_prop(node, "bootargs", &l); | 680 | p = of_get_flat_dt_prop(node, "bootargs", &l); |
681 | if (p != NULL && l > 0) | 681 | if (p != NULL && l > 0) |
682 | strlcpy(cmd_line, p, min((int)l, COMMAND_LINE_SIZE)); | 682 | strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE)); |
683 | 683 | ||
684 | #ifdef CONFIG_CMDLINE | 684 | #ifdef CONFIG_CMDLINE |
685 | #ifndef CONFIG_CMDLINE_FORCE | 685 | #ifndef CONFIG_CMDLINE_FORCE |
686 | if (p == NULL || l == 0 || (l == 1 && (*p) == 0)) | 686 | if (p == NULL || l == 0 || (l == 1 && (*p) == 0)) |
687 | #endif | 687 | #endif |
688 | strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); | 688 | strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE); |
689 | #endif /* CONFIG_CMDLINE */ | 689 | #endif /* CONFIG_CMDLINE */ |
690 | 690 | ||
691 | pr_debug("Command line is: %s\n", cmd_line); | 691 | pr_debug("Command line is: %s\n", (char*)data); |
692 | 692 | ||
693 | /* break now */ | 693 | /* break now */ |
694 | return 1; | 694 | return 1; |
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index 652bdac8ce8e..6d5d6e679fc7 100644 --- a/drivers/tty/serial/atmel_serial.c +++ b/drivers/tty/serial/atmel_serial.c | |||
@@ -1420,7 +1420,7 @@ static void __devinit atmel_init_port(struct atmel_uart_port *atmel_port, | |||
1420 | port->flags = UPF_BOOT_AUTOCONF; | 1420 | port->flags = UPF_BOOT_AUTOCONF; |
1421 | port->ops = &atmel_pops; | 1421 | port->ops = &atmel_pops; |
1422 | port->fifosize = 1; | 1422 | port->fifosize = 1; |
1423 | port->line = pdev->id; | 1423 | port->line = data->num; |
1424 | port->dev = &pdev->dev; | 1424 | port->dev = &pdev->dev; |
1425 | port->mapbase = pdev->resource[0].start; | 1425 | port->mapbase = pdev->resource[0].start; |
1426 | port->irq = pdev->resource[1].start; | 1426 | port->irq = pdev->resource[1].start; |