Hi Mark, On 17 January 2017 at 18:30, Fu Wei <fu.wei@xxxxxxxxxx> wrote: > Hi Mark, > > On 17 January 2017 at 02:30, Mark Rutland <mark.rutland@xxxxxxx> wrote: >> On Wed, Dec 21, 2016 at 02:45:58PM +0800, fu.wei@xxxxxxxxxx wrote: >>> From: Fu Wei <fu.wei@xxxxxxxxxx> >>> >>> The patch refactor original memory-mapped timer init code: >>> (1) Refactor "arch_timer_mem_init", make it become a common code for >>> memory-mapped timer init. >>> (2) Add a new function "arch_timer_mem_of_init" for DT init. >> >> As a general note, please write proper commit messages, describing what >> the problem is, and why we are making the changes. These bullet points >> don't add anything to what can be derived from a glance at the code. >> >> For this patch, you can use: >> >> clocksource: arm_arch_timer: refactor MMIO timer probing >> >> Currently the code to probe MMIO architected timers mixes DT parsing >> with actual poking of hardware. This makes the code harder than >> necessary to understand, and makes it difficult to add support for >> probing via ACPI. >> >> This patch factors all the DT-specific logic out of >> arch_timer_mem_init(), into a new function, arch_timer_mem_of_init(). >> The former pokes the hardware and determines the suitablility of >> frames based on a datastructure populated by the latter. >> >> This cleanly separates the two and will make it possible to add >> probing using the ACPI GTDT in subsequent patches. > > Great thanks for this upstream tip. > I have used your example commit message instead. > It will be in v20. > >> >> [...] >> >>> + for_each_available_child_of_node(np, frame_node) { >>> + int n; >>> + struct arch_timer_mem_frame *frame = &timer_mem->frame[i]; >>> + >>> + if (of_property_read_u32(frame_node, "frame-number", &n)) { >>> + pr_err("Missing frame-number\n"); >>> + of_node_put(frame_node); >>> + goto out; >>> + } >>> + frame->frame_nr = n; >>> + >>> + if (of_address_to_resource(frame_node, 0, &res)) { >>> + of_node_put(frame_node); >>> + goto out; >>> + } >>> + frame->cntbase = res.start; >>> + frame->size = resource_size(&res); >>> + >>> + frame->virt_irq = irq_of_parse_and_map(frame_node, >>> + ARCH_TIMER_VIRT_SPI); >>> + frame->phys_irq = irq_of_parse_and_map(frame_node, >>> + ARCH_TIMER_PHYS_SPI); >>> >>> - if (!arch_timer_needs_of_probing()) >>> + if (++i >= ARCH_TIMER_MEM_MAX_FRAMES) >>> + break; >>> + } >> >> It would be good if we could warn upon seeing more than >> ARCH_TIMER_MEM_MAX_FRAMES children, since that's obviously an error. > > OK, NP, will use > > if (i >= ARCH_TIMER_MEM_MAX_FRAMES) { > pr_err(FW_BUG "too many frames, ARMv8 spec only allows 8.\n"); Sorry, this should be "ARM spec only allows 8.\n" Not only ARMv8, but also ARMv7 > goto out; > } > > at the beginning of this loop. > > Here will be replaced by i++; > > Great thanks for your suggestion! > >> >> Thanks, >> Mark. > > > > -- > Best regards, > > Fu Wei > Software Engineer > Red Hat -- Best regards, Fu Wei Software Engineer Red Hat -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html