diff options
| author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-03-02 14:16:27 -0500 |
|---|---|---|
| committer | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-03-15 11:31:22 -0400 |
| commit | c8082d344ac4c05932fec1766e5e9ce72cf286ed (patch) | |
| tree | 8a2a7a4b2a61b3780c669b916b33a0cde09a7722 | |
| parent | 21ea52aadd6296480baad3b04fef87230517b54c (diff) | |
ARM: at91: add RSTC (Reset Controller) dt support
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: Rob Herring <rob.herring@calxeda.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
| -rw-r--r-- | Documentation/devicetree/bindings/arm/atmel-at91.txt | 12 | ||||
| -rw-r--r-- | arch/arm/boot/dts/at91sam9g20.dtsi | 5 | ||||
| -rw-r--r-- | arch/arm/boot/dts/at91sam9g45.dtsi | 5 | ||||
| -rw-r--r-- | arch/arm/boot/dts/at91sam9x5.dtsi | 5 | ||||
| -rw-r--r-- | arch/arm/mach-at91/at91sam9x5.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-at91/setup.c | 30 |
6 files changed, 57 insertions, 1 deletions
diff --git a/Documentation/devicetree/bindings/arm/atmel-at91.txt b/Documentation/devicetree/bindings/arm/atmel-at91.txt index 1aeaf6f2a1ba..a64f86717b5d 100644 --- a/Documentation/devicetree/bindings/arm/atmel-at91.txt +++ b/Documentation/devicetree/bindings/arm/atmel-at91.txt | |||
| @@ -30,3 +30,15 @@ One interrupt per TC channel in a TC block: | |||
| 30 | reg = <0xfffdc000 0x100>; | 30 | reg = <0xfffdc000 0x100>; |
| 31 | interrupts = <26 4 27 4 28 4>; | 31 | interrupts = <26 4 27 4 28 4>; |
| 32 | }; | 32 | }; |
| 33 | |||
| 34 | RSTC Reset Controller required properties: | ||
| 35 | - compatible: Should be "atmel,<chip>-rstc". | ||
| 36 | <chip> can be "at91sam9260" or "at91sam9g45" | ||
| 37 | - reg: Should contain registers location and length | ||
| 38 | |||
| 39 | Example: | ||
| 40 | |||
| 41 | rstc@fffffd00 { | ||
| 42 | compatible = "atmel,at91sam9260-rstc"; | ||
| 43 | reg = <0xfffffd00 0x10>; | ||
| 44 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9g20.dtsi b/arch/arm/boot/dts/at91sam9g20.dtsi index dd5d114a0e1d..bcad6e7dccce 100644 --- a/arch/arm/boot/dts/at91sam9g20.dtsi +++ b/arch/arm/boot/dts/at91sam9g20.dtsi | |||
| @@ -64,6 +64,11 @@ | |||
| 64 | reg = <0xfffffc00 0x100>; | 64 | reg = <0xfffffc00 0x100>; |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | rstc@fffffd00 { | ||
| 68 | compatible = "atmel,at91sam9260-rstc"; | ||
| 69 | reg = <0xfffffd00 0x10>; | ||
| 70 | }; | ||
| 71 | |||
| 67 | pit: timer@fffffd30 { | 72 | pit: timer@fffffd30 { |
| 68 | compatible = "atmel,at91sam9260-pit"; | 73 | compatible = "atmel,at91sam9260-pit"; |
| 69 | reg = <0xfffffd30 0xf>; | 74 | reg = <0xfffffd30 0xf>; |
diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index 621a329307d6..faccd4f5aace 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi | |||
| @@ -65,6 +65,11 @@ | |||
| 65 | reg = <0xfffffc00 0x100>; | 65 | reg = <0xfffffc00 0x100>; |
| 66 | }; | 66 | }; |
| 67 | 67 | ||
| 68 | rstc@fffffd00 { | ||
| 69 | compatible = "atmel,at91sam9g45-rstc"; | ||
| 70 | reg = <0xfffffd00 0x10>; | ||
| 71 | }; | ||
| 72 | |||
| 68 | pit: timer@fffffd30 { | 73 | pit: timer@fffffd30 { |
| 69 | compatible = "atmel,at91sam9260-pit"; | 74 | compatible = "atmel,at91sam9260-pit"; |
| 70 | reg = <0xfffffd30 0xf>; | 75 | reg = <0xfffffd30 0xf>; |
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 3855843fc038..d9a93fdd35a5 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi | |||
| @@ -63,6 +63,11 @@ | |||
| 63 | reg = <0xfffffc00 0x100>; | 63 | reg = <0xfffffc00 0x100>; |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | rstc@fffffe00 { | ||
| 67 | compatible = "atmel,at91sam9g45-rstc"; | ||
| 68 | reg = <0xfffffe00 0x10>; | ||
| 69 | }; | ||
| 70 | |||
| 66 | pit: timer@fffffe30 { | 71 | pit: timer@fffffe30 { |
| 67 | compatible = "atmel,at91sam9260-pit"; | 72 | compatible = "atmel,at91sam9260-pit"; |
| 68 | reg = <0xfffffe30 0xf>; | 73 | reg = <0xfffffe30 0xf>; |
diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index 7bec5a40d01a..c121fe5fabbd 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c | |||
| @@ -306,7 +306,6 @@ static void __init at91sam9x5_ioremap_registers(void) | |||
| 306 | 306 | ||
| 307 | void __init at91sam9x5_initialize(void) | 307 | void __init at91sam9x5_initialize(void) |
| 308 | { | 308 | { |
| 309 | arm_pm_restart = at91sam9g45_restart; | ||
| 310 | at91_extern_irq = (1 << AT91SAM9X5_ID_IRQ0); | 309 | at91_extern_irq = (1 << AT91SAM9X5_ID_IRQ0); |
| 311 | 310 | ||
| 312 | /* Register GPIO subsystem (using DT) */ | 311 | /* Register GPIO subsystem (using DT) */ |
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index d7abc25f6c64..3e48b59dfa74 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c | |||
| @@ -287,8 +287,38 @@ void __init at91_ioremap_matrix(u32 base_addr) | |||
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | #if defined(CONFIG_OF) | 289 | #if defined(CONFIG_OF) |
| 290 | static struct of_device_id rstc_ids[] = { | ||
| 291 | { .compatible = "atmel,at91sam9260-rstc", .data = at91sam9_alt_restart }, | ||
| 292 | { .compatible = "atmel,at91sam9g45-rstc", .data = at91sam9g45_restart }, | ||
| 293 | { /*sentinel*/ } | ||
| 294 | }; | ||
| 295 | |||
| 296 | static void at91_dt_rstc(void) | ||
| 297 | { | ||
| 298 | struct device_node *np; | ||
| 299 | const struct of_device_id *of_id; | ||
| 300 | |||
| 301 | np = of_find_matching_node(NULL, rstc_ids); | ||
| 302 | if (!np) | ||
| 303 | panic("unable to find compatible rstc node in dtb\n"); | ||
| 304 | |||
| 305 | at91_rstc_base = of_iomap(np, 0); | ||
| 306 | if (!at91_rstc_base) | ||
| 307 | panic("unable to map rstc cpu registers\n"); | ||
| 308 | |||
| 309 | of_id = of_match_node(rstc_ids, np); | ||
| 310 | if (!of_id) | ||
| 311 | panic("AT91: rtsc no restart function availlable\n"); | ||
| 312 | |||
| 313 | arm_pm_restart = of_id->data; | ||
| 314 | |||
| 315 | of_node_put(np); | ||
| 316 | } | ||
| 317 | |||
| 290 | void __init at91_dt_initialize(void) | 318 | void __init at91_dt_initialize(void) |
| 291 | { | 319 | { |
| 320 | at91_dt_rstc(); | ||
| 321 | |||
| 292 | /* temporary until have the ramc binding*/ | 322 | /* temporary until have the ramc binding*/ |
| 293 | at91_boot_soc.ioremap_registers(); | 323 | at91_boot_soc.ioremap_registers(); |
| 294 | 324 | ||
