Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-19 Thread Fu Wei
Hi Rafael,

On 16 July 2016 at 20:35, Rafael J. Wysocki  wrote:
> On Saturday, July 16, 2016 10:24:35 AM Fu Wei wrote:
>> Hi Rafeal,
>>
>> On 16 July 2016 at 05:22, Rafael J. Wysocki  wrote:
>> > On Saturday, July 16, 2016 12:32:14 AM Fu Wei wrote:
>> >> Hi Rafael,
>> >>
>> >> On 15 July 2016 at 21:07, Rafael J. Wysocki  wrote:
>> >> > On Friday, July 15, 2016 02:15:27 PM Rafael J. Wysocki wrote:
>> >> >> On Friday, July 15, 2016 03:32:35 PM Fu Wei wrote:
>> >> >> > Hi Rafael,
>> >> >> >
>> >> >
>> >> > [cut]
>> >> >
>> >> >> > >
>> >> >> > >> +   return 0;
>> >> >> > >> +   }
>> >> >> > >> +
>> >> >> > >> +   if (!gtdt->platform_timer_count) {
>> >> >> > >> +   pr_info("No Platform Timer.\n");
>> >> >> > >> +   return 0;
>> >> >> > >> +   }
>> >> >> > >> +
>> >> >> > >> +   acpi_gtdt_desc.platform_timer_start = (void *)gtdt +
>> >> >> > >> + 
>> >> >> > >> gtdt->platform_timer_offset;
>> >> >> > >> +   if (acpi_gtdt_desc.platform_timer_start <
>> >> >> > >> +   (void *)table + sizeof(struct acpi_table_gtdt)) {
>> >> >> > >> +   pr_err(FW_BUG "Platform Timer pointer error.\n");
>> >> >> > >
>> >> >> > > Why pr_err()?
>> >> >> >
>> >> >> > if (true), that means the GTDT table has bugs.
>> >> >> >
>> >> >>
>> >> >> And that's not a very useful piece of information unless you're 
>> >> >> debugging the
>> >> >> platform, is it?
>> >> >
>> >> > FWIW, I'm not a big fan of printing "your firmware is buggy" type of 
>> >> > messages
>> >> > (especially at the "error" log level or higher) unless they can be 
>> >> > clearly
>> >> > connected to a specific type of functional failure.
>> >> >
>> >> > So if you want to pring an error-level message, something like "I 
>> >> > cannot do X
>> >> > because of the firmware bug Y" would be better IMO.
>> >>
>> >> So can I do this:
>> >> pr_err(FW_BUG "Can NOT init platform_timer pointer, because of the
>> >> GTDT table bug\n");
>> >>
>> >> or pr_debug(FW_BUG "Can NOT init platform_timer_start, because of
>> >> platform_timer_offset bug in GTDT\n");
>> >>
>> >> or just delete it?
>> >>
>> >> which one do you prefer?  I think maybe should provide some clue for
>> >> users to fix the problem  :-)
>> >
>> > And how exactly would they fix it then?
>> >
>> >>
>> >> any thought ?
>> >
>> > If you print variable or function names and the like, the message should be
>> > a debug one, because that's information that can only be understood by
>> > developers (some developers are users too, but they are a minority).
>> >
>> > If you want to report an error, say what is not working (or not available
>> > etc) and why (if you know the reason at the time the message is printed).
>>
>> Great thanks, I guess I got you point.
>>
>> maybe just a very simple message like:
>> pr_err(FW_BUG "Failed to init table: GTDT table is buggy.\n");
>
> To understand this message one needs to know what "table" means here
> and what "GTDT" is.  Also the prefix already will be something like
> "ACPI: GTDT:", so repeating part of it is not really useful IMO.
>
> Can you tell me please what's not going to work when that message is printed?
>
> Will the system boot at all then?  If so, the functionality will be limited
> somehow I suppose.  How is it going to be limited?

when that message is printed, all kind of platform timer(memory-mapped
timer and SBSA watchdog) can't work.
actually, I think system can boot without them.
I have updated this on my v8(just posted), let's discuss this on v8 :-)

>
>> I will also check other pr_* , if I can update them
>
> OK, great!
>
> Thanks,
> Rafael
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-16 Thread Rafael J. Wysocki
On Saturday, July 16, 2016 10:24:35 AM Fu Wei wrote:
> Hi Rafeal,
> 
> On 16 July 2016 at 05:22, Rafael J. Wysocki  wrote:
> > On Saturday, July 16, 2016 12:32:14 AM Fu Wei wrote:
> >> Hi Rafael,
> >>
> >> On 15 July 2016 at 21:07, Rafael J. Wysocki  wrote:
> >> > On Friday, July 15, 2016 02:15:27 PM Rafael J. Wysocki wrote:
> >> >> On Friday, July 15, 2016 03:32:35 PM Fu Wei wrote:
> >> >> > Hi Rafael,
> >> >> >
> >> >
> >> > [cut]
> >> >
> >> >> > >
> >> >> > >> +   return 0;
> >> >> > >> +   }
> >> >> > >> +
> >> >> > >> +   if (!gtdt->platform_timer_count) {
> >> >> > >> +   pr_info("No Platform Timer.\n");
> >> >> > >> +   return 0;
> >> >> > >> +   }
> >> >> > >> +
> >> >> > >> +   acpi_gtdt_desc.platform_timer_start = (void *)gtdt +
> >> >> > >> + 
> >> >> > >> gtdt->platform_timer_offset;
> >> >> > >> +   if (acpi_gtdt_desc.platform_timer_start <
> >> >> > >> +   (void *)table + sizeof(struct acpi_table_gtdt)) {
> >> >> > >> +   pr_err(FW_BUG "Platform Timer pointer error.\n");
> >> >> > >
> >> >> > > Why pr_err()?
> >> >> >
> >> >> > if (true), that means the GTDT table has bugs.
> >> >> >
> >> >>
> >> >> And that's not a very useful piece of information unless you're 
> >> >> debugging the
> >> >> platform, is it?
> >> >
> >> > FWIW, I'm not a big fan of printing "your firmware is buggy" type of 
> >> > messages
> >> > (especially at the "error" log level or higher) unless they can be 
> >> > clearly
> >> > connected to a specific type of functional failure.
> >> >
> >> > So if you want to pring an error-level message, something like "I cannot 
> >> > do X
> >> > because of the firmware bug Y" would be better IMO.
> >>
> >> So can I do this:
> >> pr_err(FW_BUG "Can NOT init platform_timer pointer, because of the
> >> GTDT table bug\n");
> >>
> >> or pr_debug(FW_BUG "Can NOT init platform_timer_start, because of
> >> platform_timer_offset bug in GTDT\n");
> >>
> >> or just delete it?
> >>
> >> which one do you prefer?  I think maybe should provide some clue for
> >> users to fix the problem  :-)
> >
> > And how exactly would they fix it then?
> >
> >>
> >> any thought ?
> >
> > If you print variable or function names and the like, the message should be
> > a debug one, because that's information that can only be understood by
> > developers (some developers are users too, but they are a minority).
> >
> > If you want to report an error, say what is not working (or not available
> > etc) and why (if you know the reason at the time the message is printed).
> 
> Great thanks, I guess I got you point.
> 
> maybe just a very simple message like:
> pr_err(FW_BUG "Failed to init table: GTDT table is buggy.\n");

To understand this message one needs to know what "table" means here
and what "GTDT" is.  Also the prefix already will be something like
"ACPI: GTDT:", so repeating part of it is not really useful IMO.

Can you tell me please what's not going to work when that message is printed?

Will the system boot at all then?  If so, the functionality will be limited
somehow I suppose.  How is it going to be limited?

> I will also check other pr_* , if I can update them

OK, great!

Thanks,
Rafael



Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Fu Wei
Hi Rafeal,

On 16 July 2016 at 05:22, Rafael J. Wysocki  wrote:
> On Saturday, July 16, 2016 12:32:14 AM Fu Wei wrote:
>> Hi Rafael,
>>
>> On 15 July 2016 at 21:07, Rafael J. Wysocki  wrote:
>> > On Friday, July 15, 2016 02:15:27 PM Rafael J. Wysocki wrote:
>> >> On Friday, July 15, 2016 03:32:35 PM Fu Wei wrote:
>> >> > Hi Rafael,
>> >> >
>> >
>> > [cut]
>> >
>> >> > >
>> >> > >> +   return 0;
>> >> > >> +   }
>> >> > >> +
>> >> > >> +   if (!gtdt->platform_timer_count) {
>> >> > >> +   pr_info("No Platform Timer.\n");
>> >> > >> +   return 0;
>> >> > >> +   }
>> >> > >> +
>> >> > >> +   acpi_gtdt_desc.platform_timer_start = (void *)gtdt +
>> >> > >> + 
>> >> > >> gtdt->platform_timer_offset;
>> >> > >> +   if (acpi_gtdt_desc.platform_timer_start <
>> >> > >> +   (void *)table + sizeof(struct acpi_table_gtdt)) {
>> >> > >> +   pr_err(FW_BUG "Platform Timer pointer error.\n");
>> >> > >
>> >> > > Why pr_err()?
>> >> >
>> >> > if (true), that means the GTDT table has bugs.
>> >> >
>> >>
>> >> And that's not a very useful piece of information unless you're debugging 
>> >> the
>> >> platform, is it?
>> >
>> > FWIW, I'm not a big fan of printing "your firmware is buggy" type of 
>> > messages
>> > (especially at the "error" log level or higher) unless they can be clearly
>> > connected to a specific type of functional failure.
>> >
>> > So if you want to pring an error-level message, something like "I cannot 
>> > do X
>> > because of the firmware bug Y" would be better IMO.
>>
>> So can I do this:
>> pr_err(FW_BUG "Can NOT init platform_timer pointer, because of the
>> GTDT table bug\n");
>>
>> or pr_debug(FW_BUG "Can NOT init platform_timer_start, because of
>> platform_timer_offset bug in GTDT\n");
>>
>> or just delete it?
>>
>> which one do you prefer?  I think maybe should provide some clue for
>> users to fix the problem  :-)
>
> And how exactly would they fix it then?
>
>>
>> any thought ?
>
> If you print variable or function names and the like, the message should be
> a debug one, because that's information that can only be understood by
> developers (some developers are users too, but they are a minority).
>
> If you want to report an error, say what is not working (or not available
> etc) and why (if you know the reason at the time the message is printed).

Great thanks, I guess I got you point.

maybe just a very simple message like:
pr_err(FW_BUG "Failed to init table: GTDT table is buggy.\n");

I will also check other pr_* , if I can update them


>
> Thanks,
> Rafael
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Rafael J. Wysocki
On Saturday, July 16, 2016 12:32:14 AM Fu Wei wrote:
> Hi Rafael,
> 
> On 15 July 2016 at 21:07, Rafael J. Wysocki  wrote:
> > On Friday, July 15, 2016 02:15:27 PM Rafael J. Wysocki wrote:
> >> On Friday, July 15, 2016 03:32:35 PM Fu Wei wrote:
> >> > Hi Rafael,
> >> >
> >
> > [cut]
> >
> >> > >
> >> > >> +   return 0;
> >> > >> +   }
> >> > >> +
> >> > >> +   if (!gtdt->platform_timer_count) {
> >> > >> +   pr_info("No Platform Timer.\n");
> >> > >> +   return 0;
> >> > >> +   }
> >> > >> +
> >> > >> +   acpi_gtdt_desc.platform_timer_start = (void *)gtdt +
> >> > >> + 
> >> > >> gtdt->platform_timer_offset;
> >> > >> +   if (acpi_gtdt_desc.platform_timer_start <
> >> > >> +   (void *)table + sizeof(struct acpi_table_gtdt)) {
> >> > >> +   pr_err(FW_BUG "Platform Timer pointer error.\n");
> >> > >
> >> > > Why pr_err()?
> >> >
> >> > if (true), that means the GTDT table has bugs.
> >> >
> >>
> >> And that's not a very useful piece of information unless you're debugging 
> >> the
> >> platform, is it?
> >
> > FWIW, I'm not a big fan of printing "your firmware is buggy" type of 
> > messages
> > (especially at the "error" log level or higher) unless they can be clearly
> > connected to a specific type of functional failure.
> >
> > So if you want to pring an error-level message, something like "I cannot do 
> > X
> > because of the firmware bug Y" would be better IMO.
> 
> So can I do this:
> pr_err(FW_BUG "Can NOT init platform_timer pointer, because of the
> GTDT table bug\n");
> 
> or pr_debug(FW_BUG "Can NOT init platform_timer_start, because of
> platform_timer_offset bug in GTDT\n");
> 
> or just delete it?
> 
> which one do you prefer?  I think maybe should provide some clue for
> users to fix the problem  :-)

And how exactly would they fix it then?

> 
> any thought ?

If you print variable or function names and the like, the message should be
a debug one, because that's information that can only be understood by
developers (some developers are users too, but they are a minority).

If you want to report an error, say what is not working (or not available
etc) and why (if you know the reason at the time the message is printed).

Thanks,
Rafael



Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Fu Wei
Hi Rafael,

On 15 July 2016 at 21:07, Rafael J. Wysocki  wrote:
> On Friday, July 15, 2016 02:15:27 PM Rafael J. Wysocki wrote:
>> On Friday, July 15, 2016 03:32:35 PM Fu Wei wrote:
>> > Hi Rafael,
>> >
>
> [cut]
>
>> > >
>> > >> +   return 0;
>> > >> +   }
>> > >> +
>> > >> +   if (!gtdt->platform_timer_count) {
>> > >> +   pr_info("No Platform Timer.\n");
>> > >> +   return 0;
>> > >> +   }
>> > >> +
>> > >> +   acpi_gtdt_desc.platform_timer_start = (void *)gtdt +
>> > >> + 
>> > >> gtdt->platform_timer_offset;
>> > >> +   if (acpi_gtdt_desc.platform_timer_start <
>> > >> +   (void *)table + sizeof(struct acpi_table_gtdt)) {
>> > >> +   pr_err(FW_BUG "Platform Timer pointer error.\n");
>> > >
>> > > Why pr_err()?
>> >
>> > if (true), that means the GTDT table has bugs.
>> >
>>
>> And that's not a very useful piece of information unless you're debugging the
>> platform, is it?
>
> FWIW, I'm not a big fan of printing "your firmware is buggy" type of messages
> (especially at the "error" log level or higher) unless they can be clearly
> connected to a specific type of functional failure.
>
> So if you want to pring an error-level message, something like "I cannot do X
> because of the firmware bug Y" would be better IMO.

So can I do this:
pr_err(FW_BUG "Can NOT init platform_timer pointer, because of the
GTDT table bug\n");

or pr_debug(FW_BUG "Can NOT init platform_timer_start, because of
platform_timer_offset bug in GTDT\n");

or just delete it?

which one do you prefer?  I think maybe should provide some clue for
users to fix the problem  :-)

any thought ?


>
> Thanks,
> Rafael
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Fu Wei
Hi Rafael,

On 15 July 2016 at 20:11, Rafael J. Wysocki  wrote:
> On Friday, July 15, 2016 03:45:05 PM Fu Wei wrote:
>> Hi Rafael,
>>
>>
>> On 14 July 2016 at 05:43, Rafael J. Wysocki  wrote:
>> > On Wed, Jul 13, 2016 at 11:08 PM, Guenter Roeck  wrote:
>> >> On Wed, Jul 13, 2016 at 10:30:37PM +0200, Rafael J. Wysocki wrote:
>> >>> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
>> >>> > From: Fu Wei 
>> >>> >
>> >>> > This patch adds support for parsing arch timer in GTDT,
>> >>> > provides some kernel APIs to parse all the PPIs and
>> >>> > always-on info in GTDT and export them.
>> >>> >
>> >>> > By this driver, we can simplify arm_arch_timer drivers, and
>> >>> > separate the ACPI GTDT knowledge from it.
>> >>> >
>> >>> > Signed-off-by: Fu Wei 
>> >>> > Signed-off-by: Hanjun Guo 
>> >>> > ---
>> >>> >  drivers/acpi/Kconfig   |   5 ++
>> >>> >  drivers/acpi/Makefile  |   1 +
>> >>> >  drivers/acpi/arm64/Kconfig |  15 
>> >>> >  drivers/acpi/arm64/Makefile|   1 +
>> >>> >  drivers/acpi/arm64/acpi_gtdt.c | 170 
>> >>> > +
>> >>> >  include/linux/acpi.h   |   6 ++
>> >>> >  6 files changed, 198 insertions(+)
>> >>> >
>> >>> > diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
>> >>> > index b7e2e77..1cdc7d2 100644
>> >>> > --- a/drivers/acpi/Kconfig
>> >>> > +++ b/drivers/acpi/Kconfig
>> >>> > @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>> >>> >
>> >>> >  endif
>> >>> >
>> >>> > +if ARM64
>> >>> > +source "drivers/acpi/arm64/Kconfig"
>> >>> > +
>> >>> > +endif
>> >>> > +
>> >>> >  endif  # ACPI
>> >>> > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
>> >>> > index 251ce85..1a94ff7 100644
>> >>> > --- a/drivers/acpi/Makefile
>> >>> > +++ b/drivers/acpi/Makefile
>> >>> > @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>> >>> >  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>> >>> >  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>> >>> >  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
>> >>> > +obj-$(CONFIG_ARM64)+= arm64/
>> >>> >
>> >>> >  video-objs += acpi_video.o video_detect.o
>> >>> > diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
>> >>> > new file mode 100644
>> >>> > index 000..ff5c253
>> >>> > --- /dev/null
>> >>> > +++ b/drivers/acpi/arm64/Kconfig
>> >>> > @@ -0,0 +1,15 @@
>> >>> > +#
>> >>> > +# ACPI Configuration for ARM64
>> >>> > +#
>> >>> > +
>> >>> > +menu "The ARM64-specific ACPI Support"
>> >>> > +
>> >>> > +config ACPI_GTDT
>> >>> > +   bool "ACPI GTDT table Support"
>> >>>
>> >>> This should depend on ARM64.
>> >>>
>> >>> Also I wonder if it needs to be user-selectable?  Wouldn't it be
>> >>> better to enable it by default when building for ARM64 with ACPI?
>> >>>
>> >> It is currently selected in patch 9, in the watchdog driver's Kconfig
>> >> entry.
>> >
>> > Well, it still doesn't have to be user-selectable for that. :-)
>>
>> Actually it is also automatically selected by [PATCH v7 6/9]:
>
> Right.
>
> By user-selectable I mean "showing up in a Kconfig configurator tool".
>
> It just need not be visible in the configurator IMO.
>
>> diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
>> index 47352d2..71d5b30 100644
>> --- a/drivers/clocksource/Kconfig
>> +++ b/drivers/clocksource/Kconfig
>> @@ -8,6 +8,7 @@ config CLKSRC_OF
>>  config CLKSRC_ACPI
>>   bool
>>   select CLKSRC_PROBE
>> + select ACPI_GTDT if ARM64
>>
>>  config CLKSRC_PROBE
>>   bool
>>
>>
>> >
>> >> Not sure if I like that; maybe the watchdog driver should depend
>> >> on it instead ?
>> >
>> > If the watchdog is not the only user of it (and I don't think it is),
>> > it would be better to arrange things this way.
>> >
>>
>> There are two user:
>> (1) arm_arch_timer(which will select CLKSRC_ACPI if ACPI, then
>> CLKSRC_ACPI will select ACPI_GTDT if ARM64)
>> So arm_arch_timer will automatically selecte ACPI_GTDT if ARM64 && ACPI
>>
>> (2) sbsa_gwdt (which will select ACPI_GTDT if ACPI in [PATCH v7 9/9])
>> So sbsa_gwdt will automatically selecte ACPI_GTDT if ARM64 && ACPI &&
>> ARM_ARCH_TIMER
>>
>> So ACPI_GTDT is automatically selected by both of two users.
>>
>>
>> But like Timur said before:
>>
>> maybe we just "selecte ACPI_GTDT if ACPI" for ARM64, because ARM64
>> require GTDT if we use ACPI.
>
> Right.  That's the way to do it then and make sbsa_gwdt depend on it instead
> of selecting it.

OK, will do in my v8 patchset

>
> Thanks,
> Rafael
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Rafael J. Wysocki
On Friday, July 15, 2016 02:15:27 PM Rafael J. Wysocki wrote:
> On Friday, July 15, 2016 03:32:35 PM Fu Wei wrote:
> > Hi Rafael,
> > 

[cut]

> > >
> > >> +   return 0;
> > >> +   }
> > >> +
> > >> +   if (!gtdt->platform_timer_count) {
> > >> +   pr_info("No Platform Timer.\n");
> > >> +   return 0;
> > >> +   }
> > >> +
> > >> +   acpi_gtdt_desc.platform_timer_start = (void *)gtdt +
> > >> + 
> > >> gtdt->platform_timer_offset;
> > >> +   if (acpi_gtdt_desc.platform_timer_start <
> > >> +   (void *)table + sizeof(struct acpi_table_gtdt)) {
> > >> +   pr_err(FW_BUG "Platform Timer pointer error.\n");
> > >
> > > Why pr_err()?
> > 
> > if (true), that means the GTDT table has bugs.
> > 
> 
> And that's not a very useful piece of information unless you're debugging the
> platform, is it?

FWIW, I'm not a big fan of printing "your firmware is buggy" type of messages
(especially at the "error" log level or higher) unless they can be clearly
connected to a specific type of functional failure.

So if you want to pring an error-level message, something like "I cannot do X
because of the firmware bug Y" would be better IMO.

Thanks,
Rafael



Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Rafael J. Wysocki
On Friday, July 15, 2016 03:32:35 PM Fu Wei wrote:
> Hi Rafael,
> 
> 
> 
> On 14 July 2016 at 04:30, Rafael J. Wysocki  wrote:
> > On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
> >> From: Fu Wei 
> >>
> >> This patch adds support for parsing arch timer in GTDT,
> >> provides some kernel APIs to parse all the PPIs and
> >> always-on info in GTDT and export them.
> >>
> >> By this driver, we can simplify arm_arch_timer drivers, and
> >> separate the ACPI GTDT knowledge from it.
> >>
> >> Signed-off-by: Fu Wei 
> >> Signed-off-by: Hanjun Guo 
> >> ---
> >>  drivers/acpi/Kconfig   |   5 ++
> >>  drivers/acpi/Makefile  |   1 +
> >>  drivers/acpi/arm64/Kconfig |  15 
> >>  drivers/acpi/arm64/Makefile|   1 +
> >>  drivers/acpi/arm64/acpi_gtdt.c | 170 
> >> +
> >>  include/linux/acpi.h   |   6 ++
> >>  6 files changed, 198 insertions(+)
> >>
> >> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
> >> index b7e2e77..1cdc7d2 100644
> >> --- a/drivers/acpi/Kconfig
> >> +++ b/drivers/acpi/Kconfig
> >> @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
> >>
> >>  endif
> >>
> >> +if ARM64
> >> +source "drivers/acpi/arm64/Kconfig"
> >> +
> >> +endif
> >> +
> >>  endif  # ACPI
> >> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> >> index 251ce85..1a94ff7 100644
> >> --- a/drivers/acpi/Makefile
> >> +++ b/drivers/acpi/Makefile
> >> @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
> >>  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
> >>  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
> >>  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
> >> +obj-$(CONFIG_ARM64)+= arm64/
> >>
> >>  video-objs += acpi_video.o video_detect.o
> >> diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
> >> new file mode 100644
> >> index 000..ff5c253
> >> --- /dev/null
> >> +++ b/drivers/acpi/arm64/Kconfig
> >> @@ -0,0 +1,15 @@
> >> +#
> >> +# ACPI Configuration for ARM64
> >> +#
> >> +
> >> +menu "The ARM64-specific ACPI Support"
> >> +
> >> +config ACPI_GTDT
> >> +   bool "ACPI GTDT table Support"
> >
> > This should depend on ARM64.
> >
> > Also I wonder if it needs to be user-selectable?  Wouldn't it be
> > better to enable it by default when building for ARM64 with ACPI?
> >
> >> +   help
> >> + GTDT (Generic Timer Description Table) provides information
> >> + for per-processor timers and Platform (memory-mapped) timers
> >> + for ARM platforms. Select this option to provide information
> >> + needed for the timers init.
> >> +
> >> +endmenu
> >> diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
> >> new file mode 100644
> >> index 000..466de6b
> >> --- /dev/null
> >> +++ b/drivers/acpi/arm64/Makefile
> >> @@ -0,0 +1 @@
> >> +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
> >> diff --git a/drivers/acpi/arm64/acpi_gtdt.c 
> >> b/drivers/acpi/arm64/acpi_gtdt.c
> >> new file mode 100644
> >> index 000..9ee977d
> >> --- /dev/null
> >> +++ b/drivers/acpi/arm64/acpi_gtdt.c
> >> @@ -0,0 +1,170 @@
> >> +/*
> >> + * ARM Specific GTDT table Support
> >> + *
> >> + * Copyright (C) 2016, Linaro Ltd.
> >> + * Author: Daniel Lezcano 
> >> + * Fu Wei 
> >> + * Hanjun Guo 
> >> + *
> >> + * This program is free software; you can redistribute it and/or modify
> >> + * it under the terms of the GNU General Public License version 2 as
> >> + * published by the Free Software Foundation.
> >> + */
> >> +
> >> +#include 
> >> +#include 
> >> +#include 
> >> +#include 
> >> +
> >> +#include 
> >> +
> >> +#undef pr_fmt
> >> +#define pr_fmt(fmt) "GTDT: " fmt
> >
> > I would add "ACPI" to the prefix too if I were you, but that's me.
> 
> good idea, you are right, will do
> 
> >
> >> +
> >> +typedef struct {
> >> +   struct acpi_table_gtdt *gtdt;
> >> +   void *platform_timer_start;
> >> +   void *gtdt_end;
> >> +} acpi_gtdt_desc_t;
> >> +
> >> +static acpi_gtdt_desc_t acpi_gtdt_desc __initdata;
> >> +
> >> +static inline void *next_platform_timer(void *platform_timer)
> >> +{
> >> +   struct acpi_gtdt_header *gh = platform_timer;
> >> +
> >> +   platform_timer += gh->length;
> >> +   if (platform_timer < acpi_gtdt_desc.gtdt_end)
> >> +   return platform_timer;
> >> +
> >> +   return NULL;
> >> +}
> >> +
> >> +#define for_each_platform_timer(_g)\
> >> +   for (_g = acpi_gtdt_desc.platform_timer_start; _g;  \
> >> +_g = next_platform_timer(_g))
> >> +
> >> +static inline bool is_timer_block(void *platform_timer)
> >> +{
> >> +   struct acpi_gtdt_header *gh = platform_timer;
> >> +
> >> +   if (gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK)
> >> +   return true;
> >> +
> >> +   return false;
> >
> > This is just too much code.  It would suffice to do
> >
> > return gh->type == ACPI_GTDT_TYPE_T

Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Rafael J. Wysocki
On Friday, July 15, 2016 03:45:05 PM Fu Wei wrote:
> Hi Rafael,
> 
> 
> On 14 July 2016 at 05:43, Rafael J. Wysocki  wrote:
> > On Wed, Jul 13, 2016 at 11:08 PM, Guenter Roeck  wrote:
> >> On Wed, Jul 13, 2016 at 10:30:37PM +0200, Rafael J. Wysocki wrote:
> >>> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
> >>> > From: Fu Wei 
> >>> >
> >>> > This patch adds support for parsing arch timer in GTDT,
> >>> > provides some kernel APIs to parse all the PPIs and
> >>> > always-on info in GTDT and export them.
> >>> >
> >>> > By this driver, we can simplify arm_arch_timer drivers, and
> >>> > separate the ACPI GTDT knowledge from it.
> >>> >
> >>> > Signed-off-by: Fu Wei 
> >>> > Signed-off-by: Hanjun Guo 
> >>> > ---
> >>> >  drivers/acpi/Kconfig   |   5 ++
> >>> >  drivers/acpi/Makefile  |   1 +
> >>> >  drivers/acpi/arm64/Kconfig |  15 
> >>> >  drivers/acpi/arm64/Makefile|   1 +
> >>> >  drivers/acpi/arm64/acpi_gtdt.c | 170 
> >>> > +
> >>> >  include/linux/acpi.h   |   6 ++
> >>> >  6 files changed, 198 insertions(+)
> >>> >
> >>> > diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
> >>> > index b7e2e77..1cdc7d2 100644
> >>> > --- a/drivers/acpi/Kconfig
> >>> > +++ b/drivers/acpi/Kconfig
> >>> > @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
> >>> >
> >>> >  endif
> >>> >
> >>> > +if ARM64
> >>> > +source "drivers/acpi/arm64/Kconfig"
> >>> > +
> >>> > +endif
> >>> > +
> >>> >  endif  # ACPI
> >>> > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> >>> > index 251ce85..1a94ff7 100644
> >>> > --- a/drivers/acpi/Makefile
> >>> > +++ b/drivers/acpi/Makefile
> >>> > @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
> >>> >  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
> >>> >  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
> >>> >  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
> >>> > +obj-$(CONFIG_ARM64)+= arm64/
> >>> >
> >>> >  video-objs += acpi_video.o video_detect.o
> >>> > diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
> >>> > new file mode 100644
> >>> > index 000..ff5c253
> >>> > --- /dev/null
> >>> > +++ b/drivers/acpi/arm64/Kconfig
> >>> > @@ -0,0 +1,15 @@
> >>> > +#
> >>> > +# ACPI Configuration for ARM64
> >>> > +#
> >>> > +
> >>> > +menu "The ARM64-specific ACPI Support"
> >>> > +
> >>> > +config ACPI_GTDT
> >>> > +   bool "ACPI GTDT table Support"
> >>>
> >>> This should depend on ARM64.
> >>>
> >>> Also I wonder if it needs to be user-selectable?  Wouldn't it be
> >>> better to enable it by default when building for ARM64 with ACPI?
> >>>
> >> It is currently selected in patch 9, in the watchdog driver's Kconfig
> >> entry.
> >
> > Well, it still doesn't have to be user-selectable for that. :-)
> 
> Actually it is also automatically selected by [PATCH v7 6/9]:

Right.

By user-selectable I mean "showing up in a Kconfig configurator tool".

It just need not be visible in the configurator IMO.

> diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
> index 47352d2..71d5b30 100644
> --- a/drivers/clocksource/Kconfig
> +++ b/drivers/clocksource/Kconfig
> @@ -8,6 +8,7 @@ config CLKSRC_OF
>  config CLKSRC_ACPI
>   bool
>   select CLKSRC_PROBE
> + select ACPI_GTDT if ARM64
> 
>  config CLKSRC_PROBE
>   bool
> 
> 
> >
> >> Not sure if I like that; maybe the watchdog driver should depend
> >> on it instead ?
> >
> > If the watchdog is not the only user of it (and I don't think it is),
> > it would be better to arrange things this way.
> >
> 
> There are two user:
> (1) arm_arch_timer(which will select CLKSRC_ACPI if ACPI, then
> CLKSRC_ACPI will select ACPI_GTDT if ARM64)
> So arm_arch_timer will automatically selecte ACPI_GTDT if ARM64 && ACPI
> 
> (2) sbsa_gwdt (which will select ACPI_GTDT if ACPI in [PATCH v7 9/9])
> So sbsa_gwdt will automatically selecte ACPI_GTDT if ARM64 && ACPI &&
> ARM_ARCH_TIMER
> 
> So ACPI_GTDT is automatically selected by both of two users.
> 
> 
> But like Timur said before:
> 
> maybe we just "selecte ACPI_GTDT if ACPI" for ARM64, because ARM64
> require GTDT if we use ACPI.

Right.  That's the way to do it then and make sbsa_gwdt depend on it instead
of selecting it.

Thanks,
Rafael



Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Fu Wei
Hi Paul

On 15 July 2016 at 04:33, Paul Gortmaker  wrote:
> On Wed, Jul 13, 2016 at 1:53 PM,   wrote:
>> From: Fu Wei 
>>
>> This patch adds support for parsing arch timer in GTDT,
>> provides some kernel APIs to parse all the PPIs and
>> always-on info in GTDT and export them.
>>
>> By this driver, we can simplify arm_arch_timer drivers, and
>> separate the ACPI GTDT knowledge from it.
>>
>> Signed-off-by: Fu Wei 
>> Signed-off-by: Hanjun Guo 
>> ---
>>  drivers/acpi/Kconfig   |   5 ++
>>  drivers/acpi/Makefile  |   1 +
>>  drivers/acpi/arm64/Kconfig |  15 
>>  drivers/acpi/arm64/Makefile|   1 +
>>  drivers/acpi/arm64/acpi_gtdt.c | 170 
>> +
>>  include/linux/acpi.h   |   6 ++
>>  6 files changed, 198 insertions(+)
>>
>> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
>> index b7e2e77..1cdc7d2 100644
>> --- a/drivers/acpi/Kconfig
>> +++ b/drivers/acpi/Kconfig
>> @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>>
>>  endif
>>
>> +if ARM64
>> +source "drivers/acpi/arm64/Kconfig"
>> +
>> +endif
>> +
>>  endif  # ACPI
>> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
>> index 251ce85..1a94ff7 100644
>> --- a/drivers/acpi/Makefile
>> +++ b/drivers/acpi/Makefile
>> @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>>  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>>  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>>  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
>> +obj-$(CONFIG_ARM64)+= arm64/
>>
>>  video-objs += acpi_video.o video_detect.o
>> diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
>> new file mode 100644
>> index 000..ff5c253
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/Kconfig
>> @@ -0,0 +1,15 @@
>> +#
>> +# ACPI Configuration for ARM64
>> +#
>> +
>> +menu "The ARM64-specific ACPI Support"
>> +
>> +config ACPI_GTDT
>> +   bool "ACPI GTDT table Support"
>> +   help
>> + GTDT (Generic Timer Description Table) provides information
>> + for per-processor timers and Platform (memory-mapped) timers
>> + for ARM platforms. Select this option to provide information
>> + needed for the timers init.
>> +
>> +endmenu
>> diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
>> new file mode 100644
>> index 000..466de6b
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/Makefile
>> @@ -0,0 +1 @@
>> +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
>> diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
>> new file mode 100644
>> index 000..9ee977d
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/acpi_gtdt.c
>> @@ -0,0 +1,170 @@
>> +/*
>> + * ARM Specific GTDT table Support
>> + *
>> + * Copyright (C) 2016, Linaro Ltd.
>> + * Author: Daniel Lezcano 
>> + * Fu Wei 
>> + * Hanjun Guo 
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + */
>> +
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>
> Please do not use module.h in drivers that are using a
> bool Kconfig setting.

yes, you are right, I forget to delete it, sorry.

Will do, thanks

>
> Thanks,
> Paul.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Fu Wei
Hi Rafael,


On 14 July 2016 at 05:43, Rafael J. Wysocki  wrote:
> On Wed, Jul 13, 2016 at 11:08 PM, Guenter Roeck  wrote:
>> On Wed, Jul 13, 2016 at 10:30:37PM +0200, Rafael J. Wysocki wrote:
>>> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
>>> > From: Fu Wei 
>>> >
>>> > This patch adds support for parsing arch timer in GTDT,
>>> > provides some kernel APIs to parse all the PPIs and
>>> > always-on info in GTDT and export them.
>>> >
>>> > By this driver, we can simplify arm_arch_timer drivers, and
>>> > separate the ACPI GTDT knowledge from it.
>>> >
>>> > Signed-off-by: Fu Wei 
>>> > Signed-off-by: Hanjun Guo 
>>> > ---
>>> >  drivers/acpi/Kconfig   |   5 ++
>>> >  drivers/acpi/Makefile  |   1 +
>>> >  drivers/acpi/arm64/Kconfig |  15 
>>> >  drivers/acpi/arm64/Makefile|   1 +
>>> >  drivers/acpi/arm64/acpi_gtdt.c | 170 
>>> > +
>>> >  include/linux/acpi.h   |   6 ++
>>> >  6 files changed, 198 insertions(+)
>>> >
>>> > diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
>>> > index b7e2e77..1cdc7d2 100644
>>> > --- a/drivers/acpi/Kconfig
>>> > +++ b/drivers/acpi/Kconfig
>>> > @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>>> >
>>> >  endif
>>> >
>>> > +if ARM64
>>> > +source "drivers/acpi/arm64/Kconfig"
>>> > +
>>> > +endif
>>> > +
>>> >  endif  # ACPI
>>> > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
>>> > index 251ce85..1a94ff7 100644
>>> > --- a/drivers/acpi/Makefile
>>> > +++ b/drivers/acpi/Makefile
>>> > @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>>> >  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>>> >  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>>> >  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
>>> > +obj-$(CONFIG_ARM64)+= arm64/
>>> >
>>> >  video-objs += acpi_video.o video_detect.o
>>> > diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
>>> > new file mode 100644
>>> > index 000..ff5c253
>>> > --- /dev/null
>>> > +++ b/drivers/acpi/arm64/Kconfig
>>> > @@ -0,0 +1,15 @@
>>> > +#
>>> > +# ACPI Configuration for ARM64
>>> > +#
>>> > +
>>> > +menu "The ARM64-specific ACPI Support"
>>> > +
>>> > +config ACPI_GTDT
>>> > +   bool "ACPI GTDT table Support"
>>>
>>> This should depend on ARM64.
>>>
>>> Also I wonder if it needs to be user-selectable?  Wouldn't it be
>>> better to enable it by default when building for ARM64 with ACPI?
>>>
>> It is currently selected in patch 9, in the watchdog driver's Kconfig
>> entry.
>
> Well, it still doesn't have to be user-selectable for that. :-)

Actually it is also automatically selected by [PATCH v7 6/9]:

diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 47352d2..71d5b30 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -8,6 +8,7 @@ config CLKSRC_OF
 config CLKSRC_ACPI
  bool
  select CLKSRC_PROBE
+ select ACPI_GTDT if ARM64

 config CLKSRC_PROBE
  bool


>
>> Not sure if I like that; maybe the watchdog driver should depend
>> on it instead ?
>
> If the watchdog is not the only user of it (and I don't think it is),
> it would be better to arrange things this way.
>

There are two user:
(1) arm_arch_timer(which will select CLKSRC_ACPI if ACPI, then
CLKSRC_ACPI will select ACPI_GTDT if ARM64)
So arm_arch_timer will automatically selecte ACPI_GTDT if ARM64 && ACPI

(2) sbsa_gwdt (which will select ACPI_GTDT if ACPI in [PATCH v7 9/9])
So sbsa_gwdt will automatically selecte ACPI_GTDT if ARM64 && ACPI &&
ARM_ARCH_TIMER

So ACPI_GTDT is automatically selected by both of two users.


But like Timur said before:

maybe we just "selecte ACPI_GTDT if ACPI" for ARM64, because ARM64
require GTDT if we use ACPI.


> Thanks,
> Rafael



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Fu Wei
Hi Rafael,

On 14 July 2016 at 04:39, Rafael J. Wysocki  wrote:
> On Wed, Jul 13, 2016 at 10:30 PM, Rafael J. Wysocki  wrote:
>> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
>>> From: Fu Wei 
>>>
>>> This patch adds support for parsing arch timer in GTDT,
>>> provides some kernel APIs to parse all the PPIs and
>>> always-on info in GTDT and export them.
>>>
>>> By this driver, we can simplify arm_arch_timer drivers, and
>>> separate the ACPI GTDT knowledge from it.
>>>
>>> Signed-off-by: Fu Wei 
>>> Signed-off-by: Hanjun Guo 
>>> ---
>>>  drivers/acpi/Kconfig   |   5 ++
>>>  drivers/acpi/Makefile  |   1 +
>>>  drivers/acpi/arm64/Kconfig |  15 
>>>  drivers/acpi/arm64/Makefile|   1 +
>>>  drivers/acpi/arm64/acpi_gtdt.c | 170 
>>> +
>>>  include/linux/acpi.h   |   6 ++
>>>  6 files changed, 198 insertions(+)
>>>
>>> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
>>> index b7e2e77..1cdc7d2 100644
>>> --- a/drivers/acpi/Kconfig
>>> +++ b/drivers/acpi/Kconfig
>>> @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>>>
>>>  endif
>>>
>>> +if ARM64
>>> +source "drivers/acpi/arm64/Kconfig"
>>> +
>>> +endif
>>> +
>>>  endif  # ACPI
>>> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
>>> index 251ce85..1a94ff7 100644
>>> --- a/drivers/acpi/Makefile
>>> +++ b/drivers/acpi/Makefile
>>> @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>>>  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>>>  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>>>  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
>>> +obj-$(CONFIG_ARM64)+= arm64/
>>>
>>>  video-objs += acpi_video.o video_detect.o
>>> diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
>>> new file mode 100644
>>> index 000..ff5c253
>>> --- /dev/null
>>> +++ b/drivers/acpi/arm64/Kconfig
>>> @@ -0,0 +1,15 @@
>>> +#
>>> +# ACPI Configuration for ARM64
>>> +#
>>> +
>>> +menu "The ARM64-specific ACPI Support"
>>> +
>>> +config ACPI_GTDT
>>> +   bool "ACPI GTDT table Support"
>>
>> This should depend on ARM64.
>>
>> Also I wonder if it needs to be user-selectable?  Wouldn't it be
>> better to enable it by default when building for ARM64 with ACPI?
>>
>>> +   help
>>> + GTDT (Generic Timer Description Table) provides information
>>> + for per-processor timers and Platform (memory-mapped) timers
>>> + for ARM platforms. Select this option to provide information
>>> + needed for the timers init.
>>> +
>>> +endmenu
>>> diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
>>> new file mode 100644
>>> index 000..466de6b
>>> --- /dev/null
>>> +++ b/drivers/acpi/arm64/Makefile
>>> @@ -0,0 +1 @@
>>> +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
>>> diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
>>> new file mode 100644
>>> index 000..9ee977d
>>> --- /dev/null
>>> +++ b/drivers/acpi/arm64/acpi_gtdt.c
>>> @@ -0,0 +1,170 @@
>>> +/*
>>> + * ARM Specific GTDT table Support
>>> + *
>>> + * Copyright (C) 2016, Linaro Ltd.
>>> + * Author: Daniel Lezcano 
>>> + * Fu Wei 
>>> + * Hanjun Guo 
>>> + *
>>> + * This program is free software; you can redistribute it and/or modify
>>> + * it under the terms of the GNU General Public License version 2 as
>>> + * published by the Free Software Foundation.
>>> + */
>>> +
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +
>>> +#include 
>>> +
>>> +#undef pr_fmt
>>> +#define pr_fmt(fmt) "GTDT: " fmt
>>
>> I would add "ACPI" to the prefix too if I were you, but that's me.
>>
>>> +
>>> +typedef struct {
>>> +   struct acpi_table_gtdt *gtdt;
>>> +   void *platform_timer_start;
>>> +   void *gtdt_end;
>>> +} acpi_gtdt_desc_t;
>>> +
>>> +static acpi_gtdt_desc_t acpi_gtdt_desc __initdata;
>>> +
>>> +static inline void *next_platform_timer(void *platform_timer)
>>> +{
>>> +   struct acpi_gtdt_header *gh = platform_timer;
>>> +
>>> +   platform_timer += gh->length;
>>> +   if (platform_timer < acpi_gtdt_desc.gtdt_end)
>>> +   return platform_timer;
>>> +
>>> +   return NULL;
>>> +}
>>> +
>>> +#define for_each_platform_timer(_g)\
>>> +   for (_g = acpi_gtdt_desc.platform_timer_start; _g;  \
>>> +_g = next_platform_timer(_g))
>>> +
>>> +static inline bool is_timer_block(void *platform_timer)
>>> +{
>>> +   struct acpi_gtdt_header *gh = platform_timer;
>>> +
>>> +   if (gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK)
>>> +   return true;
>>> +
>>> +   return false;
>>
>> This is just too much code.  It would suffice to do
>>
>> return gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK;
>>
>>> +}
>>> +
>>> +static inline bool is_watchdog(void *platform_timer)
>>> +{
>>> +   struct acpi_gtdt_header *gh = platform_timer;
>>> +
>>> +   if (gh->type == ACPI_GTDT_TY

Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-15 Thread Fu Wei
Hi Rafael,



On 14 July 2016 at 04:30, Rafael J. Wysocki  wrote:
> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
>> From: Fu Wei 
>>
>> This patch adds support for parsing arch timer in GTDT,
>> provides some kernel APIs to parse all the PPIs and
>> always-on info in GTDT and export them.
>>
>> By this driver, we can simplify arm_arch_timer drivers, and
>> separate the ACPI GTDT knowledge from it.
>>
>> Signed-off-by: Fu Wei 
>> Signed-off-by: Hanjun Guo 
>> ---
>>  drivers/acpi/Kconfig   |   5 ++
>>  drivers/acpi/Makefile  |   1 +
>>  drivers/acpi/arm64/Kconfig |  15 
>>  drivers/acpi/arm64/Makefile|   1 +
>>  drivers/acpi/arm64/acpi_gtdt.c | 170 
>> +
>>  include/linux/acpi.h   |   6 ++
>>  6 files changed, 198 insertions(+)
>>
>> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
>> index b7e2e77..1cdc7d2 100644
>> --- a/drivers/acpi/Kconfig
>> +++ b/drivers/acpi/Kconfig
>> @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>>
>>  endif
>>
>> +if ARM64
>> +source "drivers/acpi/arm64/Kconfig"
>> +
>> +endif
>> +
>>  endif  # ACPI
>> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
>> index 251ce85..1a94ff7 100644
>> --- a/drivers/acpi/Makefile
>> +++ b/drivers/acpi/Makefile
>> @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>>  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>>  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>>  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
>> +obj-$(CONFIG_ARM64)+= arm64/
>>
>>  video-objs += acpi_video.o video_detect.o
>> diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
>> new file mode 100644
>> index 000..ff5c253
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/Kconfig
>> @@ -0,0 +1,15 @@
>> +#
>> +# ACPI Configuration for ARM64
>> +#
>> +
>> +menu "The ARM64-specific ACPI Support"
>> +
>> +config ACPI_GTDT
>> +   bool "ACPI GTDT table Support"
>
> This should depend on ARM64.
>
> Also I wonder if it needs to be user-selectable?  Wouldn't it be
> better to enable it by default when building for ARM64 with ACPI?
>
>> +   help
>> + GTDT (Generic Timer Description Table) provides information
>> + for per-processor timers and Platform (memory-mapped) timers
>> + for ARM platforms. Select this option to provide information
>> + needed for the timers init.
>> +
>> +endmenu
>> diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
>> new file mode 100644
>> index 000..466de6b
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/Makefile
>> @@ -0,0 +1 @@
>> +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
>> diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
>> new file mode 100644
>> index 000..9ee977d
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/acpi_gtdt.c
>> @@ -0,0 +1,170 @@
>> +/*
>> + * ARM Specific GTDT table Support
>> + *
>> + * Copyright (C) 2016, Linaro Ltd.
>> + * Author: Daniel Lezcano 
>> + * Fu Wei 
>> + * Hanjun Guo 
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + */
>> +
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include 
>> +
>> +#undef pr_fmt
>> +#define pr_fmt(fmt) "GTDT: " fmt
>
> I would add "ACPI" to the prefix too if I were you, but that's me.

good idea, you are right, will do

>
>> +
>> +typedef struct {
>> +   struct acpi_table_gtdt *gtdt;
>> +   void *platform_timer_start;
>> +   void *gtdt_end;
>> +} acpi_gtdt_desc_t;
>> +
>> +static acpi_gtdt_desc_t acpi_gtdt_desc __initdata;
>> +
>> +static inline void *next_platform_timer(void *platform_timer)
>> +{
>> +   struct acpi_gtdt_header *gh = platform_timer;
>> +
>> +   platform_timer += gh->length;
>> +   if (platform_timer < acpi_gtdt_desc.gtdt_end)
>> +   return platform_timer;
>> +
>> +   return NULL;
>> +}
>> +
>> +#define for_each_platform_timer(_g)\
>> +   for (_g = acpi_gtdt_desc.platform_timer_start; _g;  \
>> +_g = next_platform_timer(_g))
>> +
>> +static inline bool is_timer_block(void *platform_timer)
>> +{
>> +   struct acpi_gtdt_header *gh = platform_timer;
>> +
>> +   if (gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK)
>> +   return true;
>> +
>> +   return false;
>
> This is just too much code.  It would suffice to do
>
> return gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK;
>
>> +}
>> +
>> +static inline bool is_watchdog(void *platform_timer)
>> +{
>> +   struct acpi_gtdt_header *gh = platform_timer;
>> +
>> +   if (gh->type == ACPI_GTDT_TYPE_WATCHDOG)
>> +   return true;
>> +
>> +   return false;
>
> Just like above.


Thanks, this is better :-) will do


>
>> +}
>> +
>> +/*
>> + * Get some basic inf

Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-14 Thread Paul Gortmaker
On Wed, Jul 13, 2016 at 1:53 PM,   wrote:
> From: Fu Wei 
>
> This patch adds support for parsing arch timer in GTDT,
> provides some kernel APIs to parse all the PPIs and
> always-on info in GTDT and export them.
>
> By this driver, we can simplify arm_arch_timer drivers, and
> separate the ACPI GTDT knowledge from it.
>
> Signed-off-by: Fu Wei 
> Signed-off-by: Hanjun Guo 
> ---
>  drivers/acpi/Kconfig   |   5 ++
>  drivers/acpi/Makefile  |   1 +
>  drivers/acpi/arm64/Kconfig |  15 
>  drivers/acpi/arm64/Makefile|   1 +
>  drivers/acpi/arm64/acpi_gtdt.c | 170 
> +
>  include/linux/acpi.h   |   6 ++
>  6 files changed, 198 insertions(+)
>
> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
> index b7e2e77..1cdc7d2 100644
> --- a/drivers/acpi/Kconfig
> +++ b/drivers/acpi/Kconfig
> @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>
>  endif
>
> +if ARM64
> +source "drivers/acpi/arm64/Kconfig"
> +
> +endif
> +
>  endif  # ACPI
> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> index 251ce85..1a94ff7 100644
> --- a/drivers/acpi/Makefile
> +++ b/drivers/acpi/Makefile
> @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
> +obj-$(CONFIG_ARM64)+= arm64/
>
>  video-objs += acpi_video.o video_detect.o
> diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
> new file mode 100644
> index 000..ff5c253
> --- /dev/null
> +++ b/drivers/acpi/arm64/Kconfig
> @@ -0,0 +1,15 @@
> +#
> +# ACPI Configuration for ARM64
> +#
> +
> +menu "The ARM64-specific ACPI Support"
> +
> +config ACPI_GTDT
> +   bool "ACPI GTDT table Support"
> +   help
> + GTDT (Generic Timer Description Table) provides information
> + for per-processor timers and Platform (memory-mapped) timers
> + for ARM platforms. Select this option to provide information
> + needed for the timers init.
> +
> +endmenu
> diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
> new file mode 100644
> index 000..466de6b
> --- /dev/null
> +++ b/drivers/acpi/arm64/Makefile
> @@ -0,0 +1 @@
> +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
> diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
> new file mode 100644
> index 000..9ee977d
> --- /dev/null
> +++ b/drivers/acpi/arm64/acpi_gtdt.c
> @@ -0,0 +1,170 @@
> +/*
> + * ARM Specific GTDT table Support
> + *
> + * Copyright (C) 2016, Linaro Ltd.
> + * Author: Daniel Lezcano 
> + * Fu Wei 
> + * Hanjun Guo 
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 

Please do not use module.h in drivers that are using a
bool Kconfig setting.

Thanks,
Paul.


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-13 Thread Rafael J. Wysocki
On Wed, Jul 13, 2016 at 11:08 PM, Guenter Roeck  wrote:
> On Wed, Jul 13, 2016 at 10:30:37PM +0200, Rafael J. Wysocki wrote:
>> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
>> > From: Fu Wei 
>> >
>> > This patch adds support for parsing arch timer in GTDT,
>> > provides some kernel APIs to parse all the PPIs and
>> > always-on info in GTDT and export them.
>> >
>> > By this driver, we can simplify arm_arch_timer drivers, and
>> > separate the ACPI GTDT knowledge from it.
>> >
>> > Signed-off-by: Fu Wei 
>> > Signed-off-by: Hanjun Guo 
>> > ---
>> >  drivers/acpi/Kconfig   |   5 ++
>> >  drivers/acpi/Makefile  |   1 +
>> >  drivers/acpi/arm64/Kconfig |  15 
>> >  drivers/acpi/arm64/Makefile|   1 +
>> >  drivers/acpi/arm64/acpi_gtdt.c | 170 
>> > +
>> >  include/linux/acpi.h   |   6 ++
>> >  6 files changed, 198 insertions(+)
>> >
>> > diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
>> > index b7e2e77..1cdc7d2 100644
>> > --- a/drivers/acpi/Kconfig
>> > +++ b/drivers/acpi/Kconfig
>> > @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>> >
>> >  endif
>> >
>> > +if ARM64
>> > +source "drivers/acpi/arm64/Kconfig"
>> > +
>> > +endif
>> > +
>> >  endif  # ACPI
>> > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
>> > index 251ce85..1a94ff7 100644
>> > --- a/drivers/acpi/Makefile
>> > +++ b/drivers/acpi/Makefile
>> > @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>> >  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>> >  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>> >  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
>> > +obj-$(CONFIG_ARM64)+= arm64/
>> >
>> >  video-objs += acpi_video.o video_detect.o
>> > diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
>> > new file mode 100644
>> > index 000..ff5c253
>> > --- /dev/null
>> > +++ b/drivers/acpi/arm64/Kconfig
>> > @@ -0,0 +1,15 @@
>> > +#
>> > +# ACPI Configuration for ARM64
>> > +#
>> > +
>> > +menu "The ARM64-specific ACPI Support"
>> > +
>> > +config ACPI_GTDT
>> > +   bool "ACPI GTDT table Support"
>>
>> This should depend on ARM64.
>>
>> Also I wonder if it needs to be user-selectable?  Wouldn't it be
>> better to enable it by default when building for ARM64 with ACPI?
>>
> It is currently selected in patch 9, in the watchdog driver's Kconfig
> entry.

Well, it still doesn't have to be user-selectable for that. :-)

> Not sure if I like that; maybe the watchdog driver should depend
> on it instead ?

If the watchdog is not the only user of it (and I don't think it is),
it would be better to arrange things this way.

Thanks,
Rafael


Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-13 Thread Guenter Roeck
On Wed, Jul 13, 2016 at 10:30:37PM +0200, Rafael J. Wysocki wrote:
> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
> > From: Fu Wei 
> >
> > This patch adds support for parsing arch timer in GTDT,
> > provides some kernel APIs to parse all the PPIs and
> > always-on info in GTDT and export them.
> >
> > By this driver, we can simplify arm_arch_timer drivers, and
> > separate the ACPI GTDT knowledge from it.
> >
> > Signed-off-by: Fu Wei 
> > Signed-off-by: Hanjun Guo 
> > ---
> >  drivers/acpi/Kconfig   |   5 ++
> >  drivers/acpi/Makefile  |   1 +
> >  drivers/acpi/arm64/Kconfig |  15 
> >  drivers/acpi/arm64/Makefile|   1 +
> >  drivers/acpi/arm64/acpi_gtdt.c | 170 
> > +
> >  include/linux/acpi.h   |   6 ++
> >  6 files changed, 198 insertions(+)
> >
> > diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
> > index b7e2e77..1cdc7d2 100644
> > --- a/drivers/acpi/Kconfig
> > +++ b/drivers/acpi/Kconfig
> > @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
> >
> >  endif
> >
> > +if ARM64
> > +source "drivers/acpi/arm64/Kconfig"
> > +
> > +endif
> > +
> >  endif  # ACPI
> > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> > index 251ce85..1a94ff7 100644
> > --- a/drivers/acpi/Makefile
> > +++ b/drivers/acpi/Makefile
> > @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
> >  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
> >  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
> >  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
> > +obj-$(CONFIG_ARM64)+= arm64/
> >
> >  video-objs += acpi_video.o video_detect.o
> > diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
> > new file mode 100644
> > index 000..ff5c253
> > --- /dev/null
> > +++ b/drivers/acpi/arm64/Kconfig
> > @@ -0,0 +1,15 @@
> > +#
> > +# ACPI Configuration for ARM64
> > +#
> > +
> > +menu "The ARM64-specific ACPI Support"
> > +
> > +config ACPI_GTDT
> > +   bool "ACPI GTDT table Support"
> 
> This should depend on ARM64.
> 
> Also I wonder if it needs to be user-selectable?  Wouldn't it be
> better to enable it by default when building for ARM64 with ACPI?
> 
It is currently selected in patch 9, in the watchdog driver's Kconfig
entry. Not sure if I like that; maybe the watchdog driver should depend
on it instead ?

Guenter

> > +   help
> > + GTDT (Generic Timer Description Table) provides information
> > + for per-processor timers and Platform (memory-mapped) timers
> > + for ARM platforms. Select this option to provide information
> > + needed for the timers init.
> > +
> > +endmenu
> > diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
> > new file mode 100644
> > index 000..466de6b
> > --- /dev/null
> > +++ b/drivers/acpi/arm64/Makefile
> > @@ -0,0 +1 @@
> > +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
> > diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
> > new file mode 100644
> > index 000..9ee977d
> > --- /dev/null
> > +++ b/drivers/acpi/arm64/acpi_gtdt.c
> > @@ -0,0 +1,170 @@
> > +/*
> > + * ARM Specific GTDT table Support
> > + *
> > + * Copyright (C) 2016, Linaro Ltd.
> > + * Author: Daniel Lezcano 
> > + * Fu Wei 
> > + * Hanjun Guo 
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +
> > +#include 
> > +
> > +#undef pr_fmt
> > +#define pr_fmt(fmt) "GTDT: " fmt
> 
> I would add "ACPI" to the prefix too if I were you, but that's me.
> 
> > +
> > +typedef struct {
> > +   struct acpi_table_gtdt *gtdt;
> > +   void *platform_timer_start;
> > +   void *gtdt_end;
> > +} acpi_gtdt_desc_t;
> > +
> > +static acpi_gtdt_desc_t acpi_gtdt_desc __initdata;
> > +
> > +static inline void *next_platform_timer(void *platform_timer)
> > +{
> > +   struct acpi_gtdt_header *gh = platform_timer;
> > +
> > +   platform_timer += gh->length;
> > +   if (platform_timer < acpi_gtdt_desc.gtdt_end)
> > +   return platform_timer;
> > +
> > +   return NULL;
> > +}
> > +
> > +#define for_each_platform_timer(_g)\
> > +   for (_g = acpi_gtdt_desc.platform_timer_start; _g;  \
> > +_g = next_platform_timer(_g))
> > +
> > +static inline bool is_timer_block(void *platform_timer)
> > +{
> > +   struct acpi_gtdt_header *gh = platform_timer;
> > +
> > +   if (gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK)
> > +   return true;
> > +
> > +   return false;
> 
> This is just too much code.  It would suffice to do
> 
> return gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK;
> 
> > +}
> > +
> > +static inline bool is_watchdog(void *platform_timer)
> > +{
> 

Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-13 Thread Rafael J. Wysocki
On Wed, Jul 13, 2016 at 10:30 PM, Rafael J. Wysocki  wrote:
> On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
>> From: Fu Wei 
>>
>> This patch adds support for parsing arch timer in GTDT,
>> provides some kernel APIs to parse all the PPIs and
>> always-on info in GTDT and export them.
>>
>> By this driver, we can simplify arm_arch_timer drivers, and
>> separate the ACPI GTDT knowledge from it.
>>
>> Signed-off-by: Fu Wei 
>> Signed-off-by: Hanjun Guo 
>> ---
>>  drivers/acpi/Kconfig   |   5 ++
>>  drivers/acpi/Makefile  |   1 +
>>  drivers/acpi/arm64/Kconfig |  15 
>>  drivers/acpi/arm64/Makefile|   1 +
>>  drivers/acpi/arm64/acpi_gtdt.c | 170 
>> +
>>  include/linux/acpi.h   |   6 ++
>>  6 files changed, 198 insertions(+)
>>
>> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
>> index b7e2e77..1cdc7d2 100644
>> --- a/drivers/acpi/Kconfig
>> +++ b/drivers/acpi/Kconfig
>> @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>>
>>  endif
>>
>> +if ARM64
>> +source "drivers/acpi/arm64/Kconfig"
>> +
>> +endif
>> +
>>  endif  # ACPI
>> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
>> index 251ce85..1a94ff7 100644
>> --- a/drivers/acpi/Makefile
>> +++ b/drivers/acpi/Makefile
>> @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>>  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>>  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>>  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
>> +obj-$(CONFIG_ARM64)+= arm64/
>>
>>  video-objs += acpi_video.o video_detect.o
>> diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
>> new file mode 100644
>> index 000..ff5c253
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/Kconfig
>> @@ -0,0 +1,15 @@
>> +#
>> +# ACPI Configuration for ARM64
>> +#
>> +
>> +menu "The ARM64-specific ACPI Support"
>> +
>> +config ACPI_GTDT
>> +   bool "ACPI GTDT table Support"
>
> This should depend on ARM64.
>
> Also I wonder if it needs to be user-selectable?  Wouldn't it be
> better to enable it by default when building for ARM64 with ACPI?
>
>> +   help
>> + GTDT (Generic Timer Description Table) provides information
>> + for per-processor timers and Platform (memory-mapped) timers
>> + for ARM platforms. Select this option to provide information
>> + needed for the timers init.
>> +
>> +endmenu
>> diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
>> new file mode 100644
>> index 000..466de6b
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/Makefile
>> @@ -0,0 +1 @@
>> +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
>> diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
>> new file mode 100644
>> index 000..9ee977d
>> --- /dev/null
>> +++ b/drivers/acpi/arm64/acpi_gtdt.c
>> @@ -0,0 +1,170 @@
>> +/*
>> + * ARM Specific GTDT table Support
>> + *
>> + * Copyright (C) 2016, Linaro Ltd.
>> + * Author: Daniel Lezcano 
>> + * Fu Wei 
>> + * Hanjun Guo 
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + */
>> +
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include 
>> +
>> +#undef pr_fmt
>> +#define pr_fmt(fmt) "GTDT: " fmt
>
> I would add "ACPI" to the prefix too if I were you, but that's me.
>
>> +
>> +typedef struct {
>> +   struct acpi_table_gtdt *gtdt;
>> +   void *platform_timer_start;
>> +   void *gtdt_end;
>> +} acpi_gtdt_desc_t;
>> +
>> +static acpi_gtdt_desc_t acpi_gtdt_desc __initdata;
>> +
>> +static inline void *next_platform_timer(void *platform_timer)
>> +{
>> +   struct acpi_gtdt_header *gh = platform_timer;
>> +
>> +   platform_timer += gh->length;
>> +   if (platform_timer < acpi_gtdt_desc.gtdt_end)
>> +   return platform_timer;
>> +
>> +   return NULL;
>> +}
>> +
>> +#define for_each_platform_timer(_g)\
>> +   for (_g = acpi_gtdt_desc.platform_timer_start; _g;  \
>> +_g = next_platform_timer(_g))
>> +
>> +static inline bool is_timer_block(void *platform_timer)
>> +{
>> +   struct acpi_gtdt_header *gh = platform_timer;
>> +
>> +   if (gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK)
>> +   return true;
>> +
>> +   return false;
>
> This is just too much code.  It would suffice to do
>
> return gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK;
>
>> +}
>> +
>> +static inline bool is_watchdog(void *platform_timer)
>> +{
>> +   struct acpi_gtdt_header *gh = platform_timer;
>> +
>> +   if (gh->type == ACPI_GTDT_TYPE_WATCHDOG)
>> +   return true;
>> +
>> +   return false;
>
> Just like above.
>
>> +}
>> +
>> +/*
>> + * Get some basic info from GTDT table, and init the global variables above
>> + * for all timers init

Re: [PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-13 Thread Rafael J. Wysocki
On Wed, Jul 13, 2016 at 7:53 PM,   wrote:
> From: Fu Wei 
>
> This patch adds support for parsing arch timer in GTDT,
> provides some kernel APIs to parse all the PPIs and
> always-on info in GTDT and export them.
>
> By this driver, we can simplify arm_arch_timer drivers, and
> separate the ACPI GTDT knowledge from it.
>
> Signed-off-by: Fu Wei 
> Signed-off-by: Hanjun Guo 
> ---
>  drivers/acpi/Kconfig   |   5 ++
>  drivers/acpi/Makefile  |   1 +
>  drivers/acpi/arm64/Kconfig |  15 
>  drivers/acpi/arm64/Makefile|   1 +
>  drivers/acpi/arm64/acpi_gtdt.c | 170 
> +
>  include/linux/acpi.h   |   6 ++
>  6 files changed, 198 insertions(+)
>
> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
> index b7e2e77..1cdc7d2 100644
> --- a/drivers/acpi/Kconfig
> +++ b/drivers/acpi/Kconfig
> @@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
>
>  endif
>
> +if ARM64
> +source "drivers/acpi/arm64/Kconfig"
> +
> +endif
> +
>  endif  # ACPI
> diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> index 251ce85..1a94ff7 100644
> --- a/drivers/acpi/Makefile
> +++ b/drivers/acpi/Makefile
> @@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
>  obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
>  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
>  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
> +obj-$(CONFIG_ARM64)+= arm64/
>
>  video-objs += acpi_video.o video_detect.o
> diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
> new file mode 100644
> index 000..ff5c253
> --- /dev/null
> +++ b/drivers/acpi/arm64/Kconfig
> @@ -0,0 +1,15 @@
> +#
> +# ACPI Configuration for ARM64
> +#
> +
> +menu "The ARM64-specific ACPI Support"
> +
> +config ACPI_GTDT
> +   bool "ACPI GTDT table Support"

This should depend on ARM64.

Also I wonder if it needs to be user-selectable?  Wouldn't it be
better to enable it by default when building for ARM64 with ACPI?

> +   help
> + GTDT (Generic Timer Description Table) provides information
> + for per-processor timers and Platform (memory-mapped) timers
> + for ARM platforms. Select this option to provide information
> + needed for the timers init.
> +
> +endmenu
> diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
> new file mode 100644
> index 000..466de6b
> --- /dev/null
> +++ b/drivers/acpi/arm64/Makefile
> @@ -0,0 +1 @@
> +obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
> diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
> new file mode 100644
> index 000..9ee977d
> --- /dev/null
> +++ b/drivers/acpi/arm64/acpi_gtdt.c
> @@ -0,0 +1,170 @@
> +/*
> + * ARM Specific GTDT table Support
> + *
> + * Copyright (C) 2016, Linaro Ltd.
> + * Author: Daniel Lezcano 
> + * Fu Wei 
> + * Hanjun Guo 
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +
> +#undef pr_fmt
> +#define pr_fmt(fmt) "GTDT: " fmt

I would add "ACPI" to the prefix too if I were you, but that's me.

> +
> +typedef struct {
> +   struct acpi_table_gtdt *gtdt;
> +   void *platform_timer_start;
> +   void *gtdt_end;
> +} acpi_gtdt_desc_t;
> +
> +static acpi_gtdt_desc_t acpi_gtdt_desc __initdata;
> +
> +static inline void *next_platform_timer(void *platform_timer)
> +{
> +   struct acpi_gtdt_header *gh = platform_timer;
> +
> +   platform_timer += gh->length;
> +   if (platform_timer < acpi_gtdt_desc.gtdt_end)
> +   return platform_timer;
> +
> +   return NULL;
> +}
> +
> +#define for_each_platform_timer(_g)\
> +   for (_g = acpi_gtdt_desc.platform_timer_start; _g;  \
> +_g = next_platform_timer(_g))
> +
> +static inline bool is_timer_block(void *platform_timer)
> +{
> +   struct acpi_gtdt_header *gh = platform_timer;
> +
> +   if (gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK)
> +   return true;
> +
> +   return false;

This is just too much code.  It would suffice to do

return gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK;

> +}
> +
> +static inline bool is_watchdog(void *platform_timer)
> +{
> +   struct acpi_gtdt_header *gh = platform_timer;
> +
> +   if (gh->type == ACPI_GTDT_TYPE_WATCHDOG)
> +   return true;
> +
> +   return false;

Just like above.

> +}
> +
> +/*
> + * Get some basic info from GTDT table, and init the global variables above
> + * for all timers initialization of Generic Timer.
> + * This function does some validation on GTDT table.
> + */
> +static int __init acpi_gtdt_desc_init(struct acpi_table_header *table)
> +{
> +   struct acpi_table_gtdt *gtdt = container_of(table,
> +

[PATCH v7 4/9] acpi/arm64: Add GTDT table parse driver

2016-07-13 Thread fu . wei
From: Fu Wei 

This patch adds support for parsing arch timer in GTDT,
provides some kernel APIs to parse all the PPIs and
always-on info in GTDT and export them.

By this driver, we can simplify arm_arch_timer drivers, and
separate the ACPI GTDT knowledge from it.

Signed-off-by: Fu Wei 
Signed-off-by: Hanjun Guo 
---
 drivers/acpi/Kconfig   |   5 ++
 drivers/acpi/Makefile  |   1 +
 drivers/acpi/arm64/Kconfig |  15 
 drivers/acpi/arm64/Makefile|   1 +
 drivers/acpi/arm64/acpi_gtdt.c | 170 +
 include/linux/acpi.h   |   6 ++
 6 files changed, 198 insertions(+)

diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index b7e2e77..1cdc7d2 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -521,4 +521,9 @@ config XPOWER_PMIC_OPREGION
 
 endif
 
+if ARM64
+source "drivers/acpi/arm64/Kconfig"
+
+endif
+
 endif  # ACPI
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index 251ce85..1a94ff7 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -99,5 +99,6 @@ obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
 obj-$(CONFIG_PMIC_OPREGION)+= pmic/intel_pmic.o
 obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
 obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
+obj-$(CONFIG_ARM64)+= arm64/
 
 video-objs += acpi_video.o video_detect.o
diff --git a/drivers/acpi/arm64/Kconfig b/drivers/acpi/arm64/Kconfig
new file mode 100644
index 000..ff5c253
--- /dev/null
+++ b/drivers/acpi/arm64/Kconfig
@@ -0,0 +1,15 @@
+#
+# ACPI Configuration for ARM64
+#
+
+menu "The ARM64-specific ACPI Support"
+
+config ACPI_GTDT
+   bool "ACPI GTDT table Support"
+   help
+ GTDT (Generic Timer Description Table) provides information
+ for per-processor timers and Platform (memory-mapped) timers
+ for ARM platforms. Select this option to provide information
+ needed for the timers init.
+
+endmenu
diff --git a/drivers/acpi/arm64/Makefile b/drivers/acpi/arm64/Makefile
new file mode 100644
index 000..466de6b
--- /dev/null
+++ b/drivers/acpi/arm64/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_ACPI_GTDT)+= acpi_gtdt.o
diff --git a/drivers/acpi/arm64/acpi_gtdt.c b/drivers/acpi/arm64/acpi_gtdt.c
new file mode 100644
index 000..9ee977d
--- /dev/null
+++ b/drivers/acpi/arm64/acpi_gtdt.c
@@ -0,0 +1,170 @@
+/*
+ * ARM Specific GTDT table Support
+ *
+ * Copyright (C) 2016, Linaro Ltd.
+ * Author: Daniel Lezcano 
+ * Fu Wei 
+ * Hanjun Guo 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#undef pr_fmt
+#define pr_fmt(fmt) "GTDT: " fmt
+
+typedef struct {
+   struct acpi_table_gtdt *gtdt;
+   void *platform_timer_start;
+   void *gtdt_end;
+} acpi_gtdt_desc_t;
+
+static acpi_gtdt_desc_t acpi_gtdt_desc __initdata;
+
+static inline void *next_platform_timer(void *platform_timer)
+{
+   struct acpi_gtdt_header *gh = platform_timer;
+
+   platform_timer += gh->length;
+   if (platform_timer < acpi_gtdt_desc.gtdt_end)
+   return platform_timer;
+
+   return NULL;
+}
+
+#define for_each_platform_timer(_g)\
+   for (_g = acpi_gtdt_desc.platform_timer_start; _g;  \
+_g = next_platform_timer(_g))
+
+static inline bool is_timer_block(void *platform_timer)
+{
+   struct acpi_gtdt_header *gh = platform_timer;
+
+   if (gh->type == ACPI_GTDT_TYPE_TIMER_BLOCK)
+   return true;
+
+   return false;
+}
+
+static inline bool is_watchdog(void *platform_timer)
+{
+   struct acpi_gtdt_header *gh = platform_timer;
+
+   if (gh->type == ACPI_GTDT_TYPE_WATCHDOG)
+   return true;
+
+   return false;
+}
+
+/*
+ * Get some basic info from GTDT table, and init the global variables above
+ * for all timers initialization of Generic Timer.
+ * This function does some validation on GTDT table.
+ */
+static int __init acpi_gtdt_desc_init(struct acpi_table_header *table)
+{
+   struct acpi_table_gtdt *gtdt = container_of(table,
+   struct acpi_table_gtdt,
+   header);
+
+   acpi_gtdt_desc.gtdt = gtdt;
+   acpi_gtdt_desc.gtdt_end = (void *)table + table->length;
+
+   if (table->revision < 2) {
+   pr_info("Revision:%d doesn't support Platform Timers.\n",
+   table->revision);
+   return 0;
+   }
+
+   if (!gtdt->platform_timer_count) {
+   pr_info("No Platform Timer.\n");
+   return 0;
+   }
+
+   acpi_gtdt_desc.platform_timer_start = (void *)gtdt +
+ gtdt->platform_timer_offset;
+