From: fu.wei@linaro.org To: rjw@rjwysocki.net, lenb@kernel.org, daniel.lezcano@linaro.org, tglx@linutronix.de, marc.zyngier@arm.com, mark.rutland@arm.com, lorenzo.pieralisi@arm.com, sudeep.holla@arm.com, hanjun.guo@linaro.org Cc: linux-arm-kernel@lists.infradead.org, linaro-acpi@lists.linaro.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, rruigrok@codeaurora.org, harba@codeaurora.org, cov@codeaurora.org, timur@codeaurora.org, graeme.gregory@linaro.org, al.stone@linaro.org, jcm@redhat.com, wei@redhat.com, arnd@arndb.de, catalin.marinas@arm.com, will.deacon@arm.com, Suravee.Suthikulpanit@amd.com, leo.duran@amd.com, wim@iguana.be, linux@roeck-us.net, linux-watchdog@vger.kernel.org, tn@semihalf.com, christoffer.dall@linaro.org, julien.grall@arm.com, Fu Wei <fu.wei@linaro.org> Subject: [PATCH v14 7/9] clocksource/drivers/arm_arch_timer: Refactor the timer init code to prepare for GTDT Date: Thu, 29 Sep 2016 02:17:15 +0800 [thread overview] Message-ID: <1475086637-1914-8-git-send-email-fu.wei@linaro.org> (raw) In-Reply-To: <1475086637-1914-1-git-send-email-fu.wei@linaro.org> From: Fu Wei <fu.wei@linaro.org> The patch refactor original memory-mapped timer init code: (1) extract some subfunction for reusing some common code a. get_cnttidr b. is_best_frame (2) move base address and irq code for arch_timer_mem to arch_timer_mem_register Signed-off-by: Fu Wei <fu.wei@linaro.org> --- drivers/clocksource/arm_arch_timer.c | 159 +++++++++++++++++++++-------------- 1 file changed, 96 insertions(+), 63 deletions(-) diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c index c7b0040..e78095f 100644 --- a/drivers/clocksource/arm_arch_timer.c +++ b/drivers/clocksource/arm_arch_timer.c @@ -57,6 +57,7 @@ static unsigned arch_timers_present __initdata; static void __iomem *arch_counter_base; +static void __iomem *cntctlbase __initdata; struct arch_timer { void __iomem *base; @@ -656,15 +657,49 @@ out: return err; } -static int __init arch_timer_mem_register(void __iomem *base, unsigned int irq) +static int __init arch_timer_mem_register(struct device_node *np, void *frame) { - int ret; - irq_handler_t func; + struct device_node *frame_node = NULL; struct arch_timer *t; + void __iomem *base; + irq_handler_t func; + unsigned int irq; + int ret; + + if (!frame) + return -EINVAL; + + if (np) { + frame_node = (struct device_node *)frame; + base = of_iomap(frame_node, 0); + arch_timer_detect_rate(base, np); + if (arch_timer_mem_use_virtual) + irq = irq_of_parse_and_map(frame_node, VIRT_SPI); + else + irq = irq_of_parse_and_map(frame_node, PHYS_SPI); + } else { + pr_err("Device node is missing.\n"); + return -EINVAL; + } + + if (!base) { + pr_err("Can't map frame's registers\n"); + return -ENXIO; + } + if (!irq) { + pr_err("Frame missing %s irq", + arch_timer_mem_use_virtual ? "virt" : "phys"); + ret = -EINVAL; + goto out; + } + + arch_counter_base = base; t = kzalloc(sizeof(*t), GFP_KERNEL); - if (!t) - return -ENOMEM; + if (!t) { + ret = -ENOMEM; + goto out; + } t->base = base; t->evt.irq = irq; @@ -676,11 +711,13 @@ static int __init arch_timer_mem_register(void __iomem *base, unsigned int irq) func = arch_timer_handler_phys_mem; ret = request_irq(irq, func, IRQF_TIMER, "arch_mem_timer", &t->evt); - if (ret) { - pr_err("Failed to request mem timer irq\n"); - kfree(t); - } + if (!ret) + return 0; + pr_err("Failed to request mem timer irq\n"); + kfree(t); +out: + iounmap(base); return ret; } @@ -803,21 +840,54 @@ static int __init arch_timer_of_init(struct device_node *np) CLOCKSOURCE_OF_DECLARE(armv7_arch_timer, "arm,armv7-timer", arch_timer_of_init); CLOCKSOURCE_OF_DECLARE(armv8_arch_timer, "arm,armv8-timer", arch_timer_of_init); -static int __init arch_timer_mem_init(struct device_node *np) +static int __init get_cnttidr(struct device_node *np, u32 *cnttidr) { - struct device_node *frame, *best_frame = NULL; - void __iomem *cntctlbase, *base; - unsigned int irq, ret = -EINVAL; - u32 cnttidr; + if (!cnttidr) + return -EINVAL; + + if (np) + cntctlbase = of_iomap(np, 0); + else + return -EINVAL; - arch_timers_present |= ARCH_MEM_TIMER; - cntctlbase = of_iomap(np, 0); if (!cntctlbase) { pr_err("Can't find CNTCTLBase\n"); return -ENXIO; } - cnttidr = readl_relaxed(cntctlbase + CNTTIDR); + *cnttidr = readl_relaxed(cntctlbase + CNTTIDR); + return 0; +} + +static bool __init is_best_frame(u32 cnttidr, int n) +{ + u32 cntacr = CNTACR_RFRQ | CNTACR_RWPT | CNTACR_RPCT | CNTACR_RWVT | + CNTACR_RVOFF | CNTACR_RVCT; + + /* Try enabling everything, and see what sticks */ + writel_relaxed(cntacr, cntctlbase + CNTACR(n)); + cntacr = readl_relaxed(cntctlbase + CNTACR(n)); + + if ((cnttidr & CNTTIDR_VIRT(n)) && + !(~cntacr & (CNTACR_RWVT | CNTACR_RVCT))) + arch_timer_mem_use_virtual = true; + else if (~cntacr & (CNTACR_RWPT | CNTACR_RPCT)) + return false; + + return true; +} + +static int __init arch_timer_mem_init(struct device_node *np) +{ + struct device_node *frame, *best_frame = NULL; + unsigned int ret; + u32 cnttidr; + + arch_timers_present |= ARCH_MEM_TIMER; + + ret = get_cnttidr(np, &cnttidr); + if (ret) + return ret; /* * Try to find a virtual capable frame. Otherwise fall back to a @@ -825,60 +895,23 @@ static int __init arch_timer_mem_init(struct device_node *np) */ for_each_available_child_of_node(np, frame) { int n; - u32 cntacr; - if (of_property_read_u32(frame, "frame-number", &n)) { - pr_err("Missing frame-number\n"); + pr_err("Missing frame-number.\n"); of_node_put(frame); + ret = -EINVAL; goto out; } - - /* Try enabling everything, and see what sticks */ - cntacr = CNTACR_RFRQ | CNTACR_RWPT | CNTACR_RPCT | - CNTACR_RWVT | CNTACR_RVOFF | CNTACR_RVCT; - writel_relaxed(cntacr, cntctlbase + CNTACR(n)); - cntacr = readl_relaxed(cntctlbase + CNTACR(n)); - - if ((cnttidr & CNTTIDR_VIRT(n)) && - !(~cntacr & (CNTACR_RWVT | CNTACR_RVCT))) { + if (is_best_frame(cnttidr, n)) { of_node_put(best_frame); - best_frame = frame; - arch_timer_mem_use_virtual = true; - break; + best_frame = of_node_get(frame); + if (arch_timer_mem_use_virtual) + break; } - - if (~cntacr & (CNTACR_RWPT | CNTACR_RPCT)) - continue; - - of_node_put(best_frame); - best_frame = of_node_get(frame); - } - - ret= -ENXIO; - base = arch_counter_base = of_iomap(best_frame, 0); - if (!base) { - pr_err("Can't map frame's registers\n"); - goto out; } - if (arch_timer_mem_use_virtual) - irq = irq_of_parse_and_map(best_frame, VIRT_SPI); - else - irq = irq_of_parse_and_map(best_frame, PHYS_SPI); - - ret = -EINVAL; - if (!irq) { - pr_err("Frame missing %s irq", - arch_timer_mem_use_virtual ? "virt" : "phys"); - goto out; - } - - arch_timer_detect_rate(base, np); - ret = arch_timer_mem_register(base, irq); - if (ret) - goto out; - - return arch_timer_common_init(); + ret = arch_timer_mem_register(np, best_frame); + if (!ret) + ret = arch_timer_common_init(); out: iounmap(cntctlbase); of_node_put(best_frame); -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: fu.wei@linaro.org (fu.wei at linaro.org) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v14 7/9] clocksource/drivers/arm_arch_timer: Refactor the timer init code to prepare for GTDT Date: Thu, 29 Sep 2016 02:17:15 +0800 [thread overview] Message-ID: <1475086637-1914-8-git-send-email-fu.wei@linaro.org> (raw) In-Reply-To: <1475086637-1914-1-git-send-email-fu.wei@linaro.org> From: Fu Wei <fu.wei@linaro.org> The patch refactor original memory-mapped timer init code: (1) extract some subfunction for reusing some common code a. get_cnttidr b. is_best_frame (2) move base address and irq code for arch_timer_mem to arch_timer_mem_register Signed-off-by: Fu Wei <fu.wei@linaro.org> --- drivers/clocksource/arm_arch_timer.c | 159 +++++++++++++++++++++-------------- 1 file changed, 96 insertions(+), 63 deletions(-) diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c index c7b0040..e78095f 100644 --- a/drivers/clocksource/arm_arch_timer.c +++ b/drivers/clocksource/arm_arch_timer.c @@ -57,6 +57,7 @@ static unsigned arch_timers_present __initdata; static void __iomem *arch_counter_base; +static void __iomem *cntctlbase __initdata; struct arch_timer { void __iomem *base; @@ -656,15 +657,49 @@ out: return err; } -static int __init arch_timer_mem_register(void __iomem *base, unsigned int irq) +static int __init arch_timer_mem_register(struct device_node *np, void *frame) { - int ret; - irq_handler_t func; + struct device_node *frame_node = NULL; struct arch_timer *t; + void __iomem *base; + irq_handler_t func; + unsigned int irq; + int ret; + + if (!frame) + return -EINVAL; + + if (np) { + frame_node = (struct device_node *)frame; + base = of_iomap(frame_node, 0); + arch_timer_detect_rate(base, np); + if (arch_timer_mem_use_virtual) + irq = irq_of_parse_and_map(frame_node, VIRT_SPI); + else + irq = irq_of_parse_and_map(frame_node, PHYS_SPI); + } else { + pr_err("Device node is missing.\n"); + return -EINVAL; + } + + if (!base) { + pr_err("Can't map frame's registers\n"); + return -ENXIO; + } + if (!irq) { + pr_err("Frame missing %s irq", + arch_timer_mem_use_virtual ? "virt" : "phys"); + ret = -EINVAL; + goto out; + } + + arch_counter_base = base; t = kzalloc(sizeof(*t), GFP_KERNEL); - if (!t) - return -ENOMEM; + if (!t) { + ret = -ENOMEM; + goto out; + } t->base = base; t->evt.irq = irq; @@ -676,11 +711,13 @@ static int __init arch_timer_mem_register(void __iomem *base, unsigned int irq) func = arch_timer_handler_phys_mem; ret = request_irq(irq, func, IRQF_TIMER, "arch_mem_timer", &t->evt); - if (ret) { - pr_err("Failed to request mem timer irq\n"); - kfree(t); - } + if (!ret) + return 0; + pr_err("Failed to request mem timer irq\n"); + kfree(t); +out: + iounmap(base); return ret; } @@ -803,21 +840,54 @@ static int __init arch_timer_of_init(struct device_node *np) CLOCKSOURCE_OF_DECLARE(armv7_arch_timer, "arm,armv7-timer", arch_timer_of_init); CLOCKSOURCE_OF_DECLARE(armv8_arch_timer, "arm,armv8-timer", arch_timer_of_init); -static int __init arch_timer_mem_init(struct device_node *np) +static int __init get_cnttidr(struct device_node *np, u32 *cnttidr) { - struct device_node *frame, *best_frame = NULL; - void __iomem *cntctlbase, *base; - unsigned int irq, ret = -EINVAL; - u32 cnttidr; + if (!cnttidr) + return -EINVAL; + + if (np) + cntctlbase = of_iomap(np, 0); + else + return -EINVAL; - arch_timers_present |= ARCH_MEM_TIMER; - cntctlbase = of_iomap(np, 0); if (!cntctlbase) { pr_err("Can't find CNTCTLBase\n"); return -ENXIO; } - cnttidr = readl_relaxed(cntctlbase + CNTTIDR); + *cnttidr = readl_relaxed(cntctlbase + CNTTIDR); + return 0; +} + +static bool __init is_best_frame(u32 cnttidr, int n) +{ + u32 cntacr = CNTACR_RFRQ | CNTACR_RWPT | CNTACR_RPCT | CNTACR_RWVT | + CNTACR_RVOFF | CNTACR_RVCT; + + /* Try enabling everything, and see what sticks */ + writel_relaxed(cntacr, cntctlbase + CNTACR(n)); + cntacr = readl_relaxed(cntctlbase + CNTACR(n)); + + if ((cnttidr & CNTTIDR_VIRT(n)) && + !(~cntacr & (CNTACR_RWVT | CNTACR_RVCT))) + arch_timer_mem_use_virtual = true; + else if (~cntacr & (CNTACR_RWPT | CNTACR_RPCT)) + return false; + + return true; +} + +static int __init arch_timer_mem_init(struct device_node *np) +{ + struct device_node *frame, *best_frame = NULL; + unsigned int ret; + u32 cnttidr; + + arch_timers_present |= ARCH_MEM_TIMER; + + ret = get_cnttidr(np, &cnttidr); + if (ret) + return ret; /* * Try to find a virtual capable frame. Otherwise fall back to a @@ -825,60 +895,23 @@ static int __init arch_timer_mem_init(struct device_node *np) */ for_each_available_child_of_node(np, frame) { int n; - u32 cntacr; - if (of_property_read_u32(frame, "frame-number", &n)) { - pr_err("Missing frame-number\n"); + pr_err("Missing frame-number.\n"); of_node_put(frame); + ret = -EINVAL; goto out; } - - /* Try enabling everything, and see what sticks */ - cntacr = CNTACR_RFRQ | CNTACR_RWPT | CNTACR_RPCT | - CNTACR_RWVT | CNTACR_RVOFF | CNTACR_RVCT; - writel_relaxed(cntacr, cntctlbase + CNTACR(n)); - cntacr = readl_relaxed(cntctlbase + CNTACR(n)); - - if ((cnttidr & CNTTIDR_VIRT(n)) && - !(~cntacr & (CNTACR_RWVT | CNTACR_RVCT))) { + if (is_best_frame(cnttidr, n)) { of_node_put(best_frame); - best_frame = frame; - arch_timer_mem_use_virtual = true; - break; + best_frame = of_node_get(frame); + if (arch_timer_mem_use_virtual) + break; } - - if (~cntacr & (CNTACR_RWPT | CNTACR_RPCT)) - continue; - - of_node_put(best_frame); - best_frame = of_node_get(frame); - } - - ret= -ENXIO; - base = arch_counter_base = of_iomap(best_frame, 0); - if (!base) { - pr_err("Can't map frame's registers\n"); - goto out; } - if (arch_timer_mem_use_virtual) - irq = irq_of_parse_and_map(best_frame, VIRT_SPI); - else - irq = irq_of_parse_and_map(best_frame, PHYS_SPI); - - ret = -EINVAL; - if (!irq) { - pr_err("Frame missing %s irq", - arch_timer_mem_use_virtual ? "virt" : "phys"); - goto out; - } - - arch_timer_detect_rate(base, np); - ret = arch_timer_mem_register(base, irq); - if (ret) - goto out; - - return arch_timer_common_init(); + ret = arch_timer_mem_register(np, best_frame); + if (!ret) + ret = arch_timer_common_init(); out: iounmap(cntctlbase); of_node_put(best_frame); -- 2.7.4
next prev parent reply other threads:[~2016-09-28 18:17 UTC|newest] Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-28 18:17 [PATCH v14 0/9] acpi, clocksource: add GTDT driver and GTDT support in arm_arch_timer fu.wei 2016-09-28 18:17 ` fu.wei at linaro.org 2016-09-28 18:17 ` [PATCH v14 1/9] clocksource/drivers/arm_arch_timer: Move enums and defines to header file fu.wei 2016-09-28 18:17 ` fu.wei at linaro.org 2016-09-28 18:17 ` fu.wei [not found] ` <1475086637-1914-2-git-send-email-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2016-10-20 14:45 ` Mark Rutland 2016-10-20 14:45 ` Mark Rutland 2016-10-20 14:45 ` Mark Rutland 2016-10-26 8:31 ` Fu Wei 2016-10-26 8:31 ` Fu Wei 2016-10-26 8:31 ` Fu Wei 2016-10-26 10:51 ` Mark Rutland 2016-10-26 10:51 ` Mark Rutland 2016-10-26 10:51 ` Mark Rutland 2016-10-26 10:54 ` Fu Wei 2016-10-26 10:54 ` Fu Wei 2016-10-26 10:54 ` Fu Wei 2016-09-28 18:17 ` [PATCH v14 3/9] clocksource/drivers/arm_arch_timer: Improve printk relevant code fu.wei 2016-09-28 18:17 ` fu.wei at linaro.org 2016-10-20 15:32 ` Mark Rutland 2016-10-20 15:32 ` Mark Rutland 2016-10-26 8:28 ` Fu Wei 2016-10-26 8:28 ` Fu Wei 2016-10-26 8:28 ` Fu Wei [not found] ` <1475086637-1914-1-git-send-email-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2016-09-28 18:17 ` [PATCH v14 2/9] clocksource/drivers/arm_arch_timer: Add a new enum for spi type fu.wei-QSEj5FYQhm4dnm+yROfE0A 2016-09-28 18:17 ` fu.wei at linaro.org 2016-09-28 18:17 ` fu.wei [not found] ` <1475086637-1914-3-git-send-email-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2016-10-20 15:09 ` Mark Rutland 2016-10-20 15:09 ` Mark Rutland 2016-10-20 15:09 ` Mark Rutland 2016-10-26 8:26 ` Fu Wei 2016-10-26 8:26 ` Fu Wei 2016-10-26 8:26 ` Fu Wei 2016-09-28 18:17 ` [PATCH v14 4/9] acpi/arm64: Add GTDT table parse driver fu.wei-QSEj5FYQhm4dnm+yROfE0A 2016-09-28 18:17 ` fu.wei at linaro.org 2016-09-28 18:17 ` fu.wei [not found] ` <1475086637-1914-5-git-send-email-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2016-10-20 16:37 ` Mark Rutland 2016-10-20 16:37 ` Mark Rutland 2016-10-20 16:37 ` Mark Rutland 2016-10-26 11:10 ` Fu Wei 2016-10-26 11:10 ` Fu Wei 2016-10-26 11:10 ` Fu Wei 2016-10-26 12:11 ` Marc Zyngier 2016-10-26 12:11 ` Marc Zyngier 2016-10-26 12:11 ` Marc Zyngier 2016-10-26 13:41 ` Fu Wei 2016-10-26 13:41 ` Fu Wei 2016-10-26 13:41 ` Fu Wei 2016-11-11 13:43 ` Hanjun Guo 2016-11-11 13:43 ` Hanjun Guo 2016-11-11 13:43 ` Hanjun Guo 2016-11-11 13:46 ` Hanjun Guo 2016-11-11 13:46 ` Hanjun Guo 2016-11-11 13:58 ` Hanjun Guo 2016-11-11 13:58 ` Hanjun Guo 2016-11-11 15:32 ` Mark Rutland 2016-11-11 15:32 ` Mark Rutland 2016-09-28 18:17 ` [PATCH v14 6/9] acpi/arm64: Add memory-mapped timer support in GTDT driver fu.wei-QSEj5FYQhm4dnm+yROfE0A 2016-09-28 18:17 ` fu.wei at linaro.org 2016-09-28 18:17 ` fu.wei 2016-10-21 11:19 ` Mark Rutland 2016-10-21 11:19 ` Mark Rutland 2016-09-28 18:17 ` [PATCH v14 9/9] acpi/arm64: Add SBSA Generic Watchdog " fu.wei-QSEj5FYQhm4dnm+yROfE0A 2016-09-28 18:17 ` fu.wei at linaro.org 2016-09-28 18:17 ` fu.wei 2016-10-20 14:31 ` [PATCH v14 0/9] acpi, clocksource: add GTDT driver and GTDT support in arm_arch_timer Mark Rutland 2016-10-20 14:31 ` Mark Rutland 2016-10-20 14:31 ` Mark Rutland 2016-10-20 14:57 ` Lorenzo Pieralisi 2016-10-20 14:57 ` Lorenzo Pieralisi 2016-10-20 15:17 ` Mark Rutland 2016-10-20 15:17 ` Mark Rutland 2016-10-20 15:17 ` Mark Rutland 2016-10-26 8:24 ` Fu Wei 2016-10-26 8:24 ` Fu Wei 2016-10-26 8:24 ` Fu Wei 2016-09-28 18:17 ` [PATCH v14 5/9] clocksource/drivers/arm_arch_timer: Simplify ACPI support code fu.wei 2016-09-28 18:17 ` fu.wei at linaro.org [not found] ` <1475086637-1914-6-git-send-email-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2016-10-20 16:58 ` Mark Rutland 2016-10-20 16:58 ` Mark Rutland 2016-10-20 16:58 ` Mark Rutland 2016-10-21 11:14 ` Mark Rutland 2016-10-21 11:14 ` Mark Rutland 2016-10-21 11:14 ` Mark Rutland 2016-10-21 11:21 ` Mark Rutland 2016-10-21 11:21 ` Mark Rutland 2016-10-26 8:54 ` Fu Wei 2016-10-26 8:54 ` Fu Wei 2016-10-26 8:54 ` Fu Wei 2016-11-11 13:55 ` Hanjun Guo 2016-11-11 13:55 ` Hanjun Guo 2016-11-11 13:55 ` Hanjun Guo 2016-09-28 18:17 ` fu.wei [this message] 2016-09-28 18:17 ` [PATCH v14 7/9] clocksource/drivers/arm_arch_timer: Refactor the timer init code to prepare for GTDT fu.wei at linaro.org [not found] ` <1475086637-1914-8-git-send-email-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2016-10-21 11:32 ` Mark Rutland 2016-10-21 11:32 ` Mark Rutland 2016-10-21 11:32 ` Mark Rutland 2016-10-26 15:24 ` Fu Wei 2016-10-26 15:24 ` Fu Wei 2016-10-26 15:24 ` Fu Wei 2016-10-26 15:46 ` Mark Rutland 2016-10-26 15:46 ` Mark Rutland 2016-10-26 15:46 ` Mark Rutland 2016-10-26 16:07 ` Fu Wei 2016-10-26 16:07 ` Fu Wei 2016-10-26 16:07 ` Fu Wei 2016-09-28 18:17 ` [PATCH v14 8/9] clocksource/drivers/arm_arch_timer: Add GTDT support for memory-mapped timer fu.wei 2016-09-28 18:17 ` fu.wei at linaro.org 2016-09-28 18:17 ` fu.wei 2016-09-30 0:40 ` [PATCH v14 0/9] acpi, clocksource: add GTDT driver and GTDT support in arm_arch_timer Xiongfeng Wang 2016-09-30 0:40 ` Xiongfeng Wang 2016-09-30 0:40 ` Xiongfeng Wang 2016-10-05 17:26 ` Fu Wei 2016-10-05 17:26 ` Fu Wei 2016-10-05 17:26 ` Fu Wei
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1475086637-1914-8-git-send-email-fu.wei@linaro.org \ --to=fu.wei@linaro.org \ --cc=Suravee.Suthikulpanit@amd.com \ --cc=al.stone@linaro.org \ --cc=arnd@arndb.de \ --cc=catalin.marinas@arm.com \ --cc=christoffer.dall@linaro.org \ --cc=cov@codeaurora.org \ --cc=daniel.lezcano@linaro.org \ --cc=graeme.gregory@linaro.org \ --cc=hanjun.guo@linaro.org \ --cc=harba@codeaurora.org \ --cc=jcm@redhat.com \ --cc=julien.grall@arm.com \ --cc=lenb@kernel.org \ --cc=leo.duran@amd.com \ --cc=linaro-acpi@lists.linaro.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-watchdog@vger.kernel.org \ --cc=linux@roeck-us.net \ --cc=lorenzo.pieralisi@arm.com \ --cc=marc.zyngier@arm.com \ --cc=mark.rutland@arm.com \ --cc=rjw@rjwysocki.net \ --cc=rruigrok@codeaurora.org \ --cc=sudeep.holla@arm.com \ --cc=tglx@linutronix.de \ --cc=timur@codeaurora.org \ --cc=tn@semihalf.com \ --cc=wei@redhat.com \ --cc=will.deacon@arm.com \ --cc=wim@iguana.be \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.