Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-11 Thread Vinod Koul
On Fri, Dec 11, 2015 at 06:57:51AM +, Wang, Annie wrote:
> >> +  /*
> >> +   * If the ACPI device already has a node attached. It must be
> >> +   * renamed.
> >> +   */
> >> +  if (quirk->quirk & MULTI_ATTACHED_QUIRK)
> >> +  sprintf(amba_devname, "%s%s", dev_name(>dev),
> >"DMA");
> >> +  else
> >> +  memcpy(amba_devname, dev_name(>dev),
> >> + strlen(dev_name(>dev)));
> >> +
> >> +  amba_dev = amba_device_alloc(amba_devname,
> >> resource->start,
> >> resource_size(resource));
> >>
> >
> >Isn't this basially an MFD in a rather odd fashion?

MFD yes, odd perhaps made out here!
> >
> >I would have though having a device which just splits the resources then 
> >creates 2
> >children would be a whole lot simpler?
> >
Yup!

> 
> It seems more complex, if I  trans an ACPI device to pdev, then attach 2 
> platform child nodes,
> and create an amba device refer to one of the childs. Too many trans. 

Sorry but I dont think that is right assumption, it will simper and PM would
become easy

-- 
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-11 Thread Vinod Koul
On Fri, Dec 11, 2015 at 06:57:51AM +, Wang, Annie wrote:
> >> +  /*
> >> +   * If the ACPI device already has a node attached. It must be
> >> +   * renamed.
> >> +   */
> >> +  if (quirk->quirk & MULTI_ATTACHED_QUIRK)
> >> +  sprintf(amba_devname, "%s%s", dev_name(>dev),
> >"DMA");
> >> +  else
> >> +  memcpy(amba_devname, dev_name(>dev),
> >> + strlen(dev_name(>dev)));
> >> +
> >> +  amba_dev = amba_device_alloc(amba_devname,
> >> resource->start,
> >> resource_size(resource));
> >>
> >
> >Isn't this basially an MFD in a rather odd fashion?

MFD yes, odd perhaps made out here!
> >
> >I would have though having a device which just splits the resources then 
> >creates 2
> >children would be a whole lot simpler?
> >
Yup!

> 
> It seems more complex, if I  trans an ACPI device to pdev, then attach 2 
> platform child nodes,
> and create an amba device refer to one of the childs. Too many trans. 

Sorry but I dont think that is right assumption, it will simper and PM would
become easy

-- 
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-10 Thread Wang, Annie
>-Original Message-
>From: Graeme Gregory [mailto:g...@slimlogic.co.uk]
>Sent: Friday, December 04, 2015 9:16 PM
>To: Wang, Annie
>Cc: Vinod Koul; Mika Westerberg; Joerg Roedel; Greg Kroah-Hartman; Rafael J.
>Wysocki; linux-a...@vger.kernel.org; linux-kernel@vger.kernel.org; linux-
>ser...@vger.kernel.org; dmaeng...@vger.kernel.org; iommu@lists.linux-
>foundation.org; Borislav Petkov; Huang, Ray; Wan, Vincent; Xue, Ken; Li, Tony
>Subject: Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330
>specific device config
>
>On Fri, Dec 04, 2015 at 11:24:20AM +0800, Wang Hongcheng wrote:
>> AMD pl330 is a UART DMA device, it shares one ACPI item with UART. So
>> a platform device and an acpi device will be created according to
>> AMD0020 ACPI dev. And its mem base address must have an offset. As a
>> result, MULTI_ATTACHED_QUIRK and MULTI_ATTACHED_QUIRK are used.
>>
>> Signed-off-by: Wang Hongcheng 
>> ---
>>  drivers/acpi/acpi_amba.c | 31 +++
>> drivers/acpi/acpi_apd.c  | 56 +--
>-
>>  include/linux/acpi.h | 13 +--
>>  3 files changed, 81 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/acpi/acpi_amba.c b/drivers/acpi/acpi_amba.c index
>> 4f0366a..8a5269c 100644
>> --- a/drivers/acpi/acpi_amba.c
>> +++ b/drivers/acpi/acpi_amba.c
>> @@ -31,6 +31,8 @@ ACPI_MODULE_NAME("amba");
>>   * @periphid: AMBA device periphid.
>>   * @fixed_rate: Clock frequency.
>>   * @pdata: Platform data specific to the device.
>> + * @quirk: Specific device config, including device multiattach.
>> + * and mem base offset.
>>   *
>>   * Check if the given @adev can be represented as an AMBA device and, if
>>   * that's the case, create and register an AMBA device, populate its
>> @@ -42,7 +44,8 @@ ACPI_MODULE_NAME("amba");  struct amba_device
>> *acpi_create_amba_device(struct acpi_device *adev,
>>  unsigned int periphid,
>>  unsigned long fixed_rate,
>> -void *pdata)
>> +void *pdata,
>> +struct acpi_amba_quirk *quirk)
>>  {
>>  struct amba_device *amba_dev = NULL;
>>  struct device *parent;
>> @@ -54,12 +57,14 @@ struct amba_device *acpi_create_amba_device(struct
>acpi_device *adev,
>>  unsigned int i;
>>  unsigned int irq[AMBA_NR_IRQS];
>>  struct clk *clk = ERR_PTR(-ENODEV);
>> +char amba_devname[100];
>>
>>  /*
>>   * If the ACPI node already has a physical device attached,
>> - * skip it.
>> + * skip it. Except some special devices such as AMD0020 which
>> + * needs attach physical devices two times.
>>   */
>> -if (adev->physical_node_count)
>> +if (adev->physical_node_count && !(quirk->quirk &
>> +MULTI_ATTACHED_QUIRK))
>>  return NULL;
>>
>>  INIT_LIST_HEAD(_list);
>> @@ -85,7 +90,24 @@ struct amba_device *acpi_create_amba_device(struct
>acpi_device *adev,
>>  memcpy(resource, rentry->res, sizeof(struct resource));
>>  }
>>
>> -amba_dev = amba_device_alloc(dev_name(>dev),
>> +/*
>> + * The memory address of AMD pl330 has an offset of ACPI
>> + * mem resource.
>> + */
>> +if (quirk->quirk & BASE_OFFSET_QUIRK)
>> +resource->start += quirk->base_offset;
>> +
>> +/*
>> + * If the ACPI device already has a node attached. It must be
>> + * renamed.
>> + */
>> +if (quirk->quirk & MULTI_ATTACHED_QUIRK)
>> +sprintf(amba_devname, "%s%s", dev_name(>dev),
>"DMA");
>> +else
>> +memcpy(amba_devname, dev_name(>dev),
>> +   strlen(dev_name(>dev)));
>> +
>> +amba_dev = amba_device_alloc(amba_devname,
>>   resource->start,
>>   resource_size(resource));
>>
>
>Isn't this basially an MFD in a rather odd fashion?
>
>I would have though having a device which just splits the resources then 
>creates 2
>children would be a whole lot simpler?
>
>Graeme

It seems more complex, if I  trans an ACPI device to pdev, then attach 2 
platform child nodes,
and create an amba device refer to one of the childs. Too many trans. 

Thanks,
Hongcheng(Annie)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-10 Thread Wang, Annie
>-Original Message-
>From: Graeme Gregory [mailto:g...@slimlogic.co.uk]
>Sent: Friday, December 04, 2015 9:16 PM
>To: Wang, Annie
>Cc: Vinod Koul; Mika Westerberg; Joerg Roedel; Greg Kroah-Hartman; Rafael J.
>Wysocki; linux-a...@vger.kernel.org; linux-kernel@vger.kernel.org; linux-
>ser...@vger.kernel.org; dmaeng...@vger.kernel.org; iommu@lists.linux-
>foundation.org; Borislav Petkov; Huang, Ray; Wan, Vincent; Xue, Ken; Li, Tony
>Subject: Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330
>specific device config
>
>On Fri, Dec 04, 2015 at 11:24:20AM +0800, Wang Hongcheng wrote:
>> AMD pl330 is a UART DMA device, it shares one ACPI item with UART. So
>> a platform device and an acpi device will be created according to
>> AMD0020 ACPI dev. And its mem base address must have an offset. As a
>> result, MULTI_ATTACHED_QUIRK and MULTI_ATTACHED_QUIRK are used.
>>
>> Signed-off-by: Wang Hongcheng <annie.w...@amd.com>
>> ---
>>  drivers/acpi/acpi_amba.c | 31 +++
>> drivers/acpi/acpi_apd.c  | 56 +--
>-
>>  include/linux/acpi.h | 13 +--
>>  3 files changed, 81 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/acpi/acpi_amba.c b/drivers/acpi/acpi_amba.c index
>> 4f0366a..8a5269c 100644
>> --- a/drivers/acpi/acpi_amba.c
>> +++ b/drivers/acpi/acpi_amba.c
>> @@ -31,6 +31,8 @@ ACPI_MODULE_NAME("amba");
>>   * @periphid: AMBA device periphid.
>>   * @fixed_rate: Clock frequency.
>>   * @pdata: Platform data specific to the device.
>> + * @quirk: Specific device config, including device multiattach.
>> + * and mem base offset.
>>   *
>>   * Check if the given @adev can be represented as an AMBA device and, if
>>   * that's the case, create and register an AMBA device, populate its
>> @@ -42,7 +44,8 @@ ACPI_MODULE_NAME("amba");  struct amba_device
>> *acpi_create_amba_device(struct acpi_device *adev,
>>  unsigned int periphid,
>>  unsigned long fixed_rate,
>> -void *pdata)
>> +void *pdata,
>> +struct acpi_amba_quirk *quirk)
>>  {
>>  struct amba_device *amba_dev = NULL;
>>  struct device *parent;
>> @@ -54,12 +57,14 @@ struct amba_device *acpi_create_amba_device(struct
>acpi_device *adev,
>>  unsigned int i;
>>  unsigned int irq[AMBA_NR_IRQS];
>>  struct clk *clk = ERR_PTR(-ENODEV);
>> +char amba_devname[100];
>>
>>  /*
>>   * If the ACPI node already has a physical device attached,
>> - * skip it.
>> + * skip it. Except some special devices such as AMD0020 which
>> + * needs attach physical devices two times.
>>   */
>> -if (adev->physical_node_count)
>> +if (adev->physical_node_count && !(quirk->quirk &
>> +MULTI_ATTACHED_QUIRK))
>>  return NULL;
>>
>>  INIT_LIST_HEAD(_list);
>> @@ -85,7 +90,24 @@ struct amba_device *acpi_create_amba_device(struct
>acpi_device *adev,
>>  memcpy(resource, rentry->res, sizeof(struct resource));
>>  }
>>
>> -amba_dev = amba_device_alloc(dev_name(>dev),
>> +/*
>> + * The memory address of AMD pl330 has an offset of ACPI
>> + * mem resource.
>> + */
>> +if (quirk->quirk & BASE_OFFSET_QUIRK)
>> +resource->start += quirk->base_offset;
>> +
>> +/*
>> + * If the ACPI device already has a node attached. It must be
>> + * renamed.
>> + */
>> +if (quirk->quirk & MULTI_ATTACHED_QUIRK)
>> +sprintf(amba_devname, "%s%s", dev_name(>dev),
>"DMA");
>> +else
>> +memcpy(amba_devname, dev_name(>dev),
>> +   strlen(dev_name(>dev)));
>> +
>> +amba_dev = amba_device_alloc(amba_devname,
>>   resource->start,
>>   resource_size(resource));
>>
>
>Isn't this basially an MFD in a rather odd fashion?
>
>I would have though having a device which just splits the resources then 
>creates 2
>children would be a whole lot simpler?
>
>Graeme

It seems more complex, if I  trans an ACPI device to pdev, then attach 2 
platform child nodes,
and create an amba device refer to one of the childs. Too many trans. 

Thanks,
Hongcheng(Annie)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-04 Thread Graeme Gregory
On Fri, Dec 04, 2015 at 11:24:20AM +0800, Wang Hongcheng wrote:
> AMD pl330 is a UART DMA device, it shares one ACPI item with UART. So
> a platform device and an acpi device will be created according to
> AMD0020 ACPI dev. And its mem base address must have an offset. As a
> result, MULTI_ATTACHED_QUIRK and MULTI_ATTACHED_QUIRK are used.
> 
> Signed-off-by: Wang Hongcheng 
> ---
>  drivers/acpi/acpi_amba.c | 31 +++
>  drivers/acpi/acpi_apd.c  | 56 
> +---
>  include/linux/acpi.h | 13 +--
>  3 files changed, 81 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_amba.c b/drivers/acpi/acpi_amba.c
> index 4f0366a..8a5269c 100644
> --- a/drivers/acpi/acpi_amba.c
> +++ b/drivers/acpi/acpi_amba.c
> @@ -31,6 +31,8 @@ ACPI_MODULE_NAME("amba");
>   * @periphid: AMBA device periphid.
>   * @fixed_rate: Clock frequency.
>   * @pdata: Platform data specific to the device.
> + * @quirk: Specific device config, including device multiattach.
> + * and mem base offset.
>   *
>   * Check if the given @adev can be represented as an AMBA device and, if
>   * that's the case, create and register an AMBA device, populate its
> @@ -42,7 +44,8 @@ ACPI_MODULE_NAME("amba");
>  struct amba_device *acpi_create_amba_device(struct acpi_device *adev,
>   unsigned int periphid,
>   unsigned long fixed_rate,
> - void *pdata)
> + void *pdata,
> + struct acpi_amba_quirk *quirk)
>  {
>   struct amba_device *amba_dev = NULL;
>   struct device *parent;
> @@ -54,12 +57,14 @@ struct amba_device *acpi_create_amba_device(struct 
> acpi_device *adev,
>   unsigned int i;
>   unsigned int irq[AMBA_NR_IRQS];
>   struct clk *clk = ERR_PTR(-ENODEV);
> + char amba_devname[100];
>  
>   /*
>* If the ACPI node already has a physical device attached,
> -  * skip it.
> +  * skip it. Except some special devices such as AMD0020 which
> +  * needs attach physical devices two times.
>*/
> - if (adev->physical_node_count)
> + if (adev->physical_node_count && !(quirk->quirk & MULTI_ATTACHED_QUIRK))
>   return NULL;
>  
>   INIT_LIST_HEAD(_list);
> @@ -85,7 +90,24 @@ struct amba_device *acpi_create_amba_device(struct 
> acpi_device *adev,
>   memcpy(resource, rentry->res, sizeof(struct resource));
>   }
>  
> - amba_dev = amba_device_alloc(dev_name(>dev),
> + /*
> +  * The memory address of AMD pl330 has an offset of ACPI
> +  * mem resource.
> +  */
> + if (quirk->quirk & BASE_OFFSET_QUIRK)
> + resource->start += quirk->base_offset;
> +
> + /*
> +  * If the ACPI device already has a node attached. It must be
> +  * renamed.
> +  */
> + if (quirk->quirk & MULTI_ATTACHED_QUIRK)
> + sprintf(amba_devname, "%s%s", dev_name(>dev), "DMA");
> + else
> + memcpy(amba_devname, dev_name(>dev),
> +strlen(dev_name(>dev)));
> +
> + amba_dev = amba_device_alloc(amba_devname,
>resource->start,
>resource_size(resource));
>  

Isn't this basially an MFD in a rather odd fashion?

I would have though having a device which just splits the resources then
creates 2 children would be a whole lot simpler?

Graeme

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-04 Thread kbuild test robot
Hi Wang,

[auto build test ERROR on pm/linux-next]
[also build test ERROR on v4.4-rc3 next-20151203]

url:
https://github.com/0day-ci/linux/commits/Wang-Hongcheng/8250-AMD-Carrizo-UART-PL300-DMA-enablement/20151204-203235
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git 
linux-next
config: x86_64-lkp (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/acpi/acpi_apd.c: In function 'acpi_apd_create_device':
>> drivers/acpi/acpi_apd.c:145:3: error: implicit declaration of function 
>> 'setup_quirks' [-Werror=implicit-function-declaration]
  setup_quirks(pdev, _quirks);
  ^
   cc1: some warnings being treated as errors

vim +/setup_quirks +145 drivers/acpi/acpi_apd.c

   139  pdev = acpi_create_platform_device(adev);
   140  if (IS_ERR_OR_NULL(pdev))
   141  goto err_out;
   142  
   143  if (!strncmp(pdev->name, "AMD0020", 7)) {
   144  memset(_quirks, 0, sizeof(amba_quirks));
 > 145  setup_quirks(pdev, _quirks);
   146  
   147  amba_dev = acpi_create_amba_device(pdata->adev, 
0x00041330,
   148 4800,

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: Binary data


Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-04 Thread kbuild test robot
Hi Wang,

[auto build test ERROR on pm/linux-next]
[also build test ERROR on v4.4-rc3 next-20151203]

url:
https://github.com/0day-ci/linux/commits/Wang-Hongcheng/8250-AMD-Carrizo-UART-PL300-DMA-enablement/20151204-203235
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git 
linux-next
config: x86_64-lkp (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/acpi/acpi_apd.c: In function 'acpi_apd_create_device':
>> drivers/acpi/acpi_apd.c:145:3: error: implicit declaration of function 
>> 'setup_quirks' [-Werror=implicit-function-declaration]
  setup_quirks(pdev, _quirks);
  ^
   cc1: some warnings being treated as errors

vim +/setup_quirks +145 drivers/acpi/acpi_apd.c

   139  pdev = acpi_create_platform_device(adev);
   140  if (IS_ERR_OR_NULL(pdev))
   141  goto err_out;
   142  
   143  if (!strncmp(pdev->name, "AMD0020", 7)) {
   144  memset(_quirks, 0, sizeof(amba_quirks));
 > 145  setup_quirks(pdev, _quirks);
   146  
   147  amba_dev = acpi_create_amba_device(pdata->adev, 
0x00041330,
   148 4800,

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: Binary data


Re: [PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-04 Thread Graeme Gregory
On Fri, Dec 04, 2015 at 11:24:20AM +0800, Wang Hongcheng wrote:
> AMD pl330 is a UART DMA device, it shares one ACPI item with UART. So
> a platform device and an acpi device will be created according to
> AMD0020 ACPI dev. And its mem base address must have an offset. As a
> result, MULTI_ATTACHED_QUIRK and MULTI_ATTACHED_QUIRK are used.
> 
> Signed-off-by: Wang Hongcheng 
> ---
>  drivers/acpi/acpi_amba.c | 31 +++
>  drivers/acpi/acpi_apd.c  | 56 
> +---
>  include/linux/acpi.h | 13 +--
>  3 files changed, 81 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_amba.c b/drivers/acpi/acpi_amba.c
> index 4f0366a..8a5269c 100644
> --- a/drivers/acpi/acpi_amba.c
> +++ b/drivers/acpi/acpi_amba.c
> @@ -31,6 +31,8 @@ ACPI_MODULE_NAME("amba");
>   * @periphid: AMBA device periphid.
>   * @fixed_rate: Clock frequency.
>   * @pdata: Platform data specific to the device.
> + * @quirk: Specific device config, including device multiattach.
> + * and mem base offset.
>   *
>   * Check if the given @adev can be represented as an AMBA device and, if
>   * that's the case, create and register an AMBA device, populate its
> @@ -42,7 +44,8 @@ ACPI_MODULE_NAME("amba");
>  struct amba_device *acpi_create_amba_device(struct acpi_device *adev,
>   unsigned int periphid,
>   unsigned long fixed_rate,
> - void *pdata)
> + void *pdata,
> + struct acpi_amba_quirk *quirk)
>  {
>   struct amba_device *amba_dev = NULL;
>   struct device *parent;
> @@ -54,12 +57,14 @@ struct amba_device *acpi_create_amba_device(struct 
> acpi_device *adev,
>   unsigned int i;
>   unsigned int irq[AMBA_NR_IRQS];
>   struct clk *clk = ERR_PTR(-ENODEV);
> + char amba_devname[100];
>  
>   /*
>* If the ACPI node already has a physical device attached,
> -  * skip it.
> +  * skip it. Except some special devices such as AMD0020 which
> +  * needs attach physical devices two times.
>*/
> - if (adev->physical_node_count)
> + if (adev->physical_node_count && !(quirk->quirk & MULTI_ATTACHED_QUIRK))
>   return NULL;
>  
>   INIT_LIST_HEAD(_list);
> @@ -85,7 +90,24 @@ struct amba_device *acpi_create_amba_device(struct 
> acpi_device *adev,
>   memcpy(resource, rentry->res, sizeof(struct resource));
>   }
>  
> - amba_dev = amba_device_alloc(dev_name(>dev),
> + /*
> +  * The memory address of AMD pl330 has an offset of ACPI
> +  * mem resource.
> +  */
> + if (quirk->quirk & BASE_OFFSET_QUIRK)
> + resource->start += quirk->base_offset;
> +
> + /*
> +  * If the ACPI device already has a node attached. It must be
> +  * renamed.
> +  */
> + if (quirk->quirk & MULTI_ATTACHED_QUIRK)
> + sprintf(amba_devname, "%s%s", dev_name(>dev), "DMA");
> + else
> + memcpy(amba_devname, dev_name(>dev),
> +strlen(dev_name(>dev)));
> +
> + amba_dev = amba_device_alloc(amba_devname,
>resource->start,
>resource_size(resource));
>  

Isn't this basially an MFD in a rather odd fashion?

I would have though having a device which just splits the resources then
creates 2 children would be a whole lot simpler?

Graeme

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-03 Thread Wang Hongcheng
AMD pl330 is a UART DMA device, it shares one ACPI item with UART. So
a platform device and an acpi device will be created according to
AMD0020 ACPI dev. And its mem base address must have an offset. As a
result, MULTI_ATTACHED_QUIRK and MULTI_ATTACHED_QUIRK are used.

Signed-off-by: Wang Hongcheng 
---
 drivers/acpi/acpi_amba.c | 31 +++
 drivers/acpi/acpi_apd.c  | 56 +---
 include/linux/acpi.h | 13 +--
 3 files changed, 81 insertions(+), 19 deletions(-)

diff --git a/drivers/acpi/acpi_amba.c b/drivers/acpi/acpi_amba.c
index 4f0366a..8a5269c 100644
--- a/drivers/acpi/acpi_amba.c
+++ b/drivers/acpi/acpi_amba.c
@@ -31,6 +31,8 @@ ACPI_MODULE_NAME("amba");
  * @periphid: AMBA device periphid.
  * @fixed_rate: Clock frequency.
  * @pdata: Platform data specific to the device.
+ * @quirk: Specific device config, including device multiattach.
+ * and mem base offset.
  *
  * Check if the given @adev can be represented as an AMBA device and, if
  * that's the case, create and register an AMBA device, populate its
@@ -42,7 +44,8 @@ ACPI_MODULE_NAME("amba");
 struct amba_device *acpi_create_amba_device(struct acpi_device *adev,
unsigned int periphid,
unsigned long fixed_rate,
-   void *pdata)
+   void *pdata,
+   struct acpi_amba_quirk *quirk)
 {
struct amba_device *amba_dev = NULL;
struct device *parent;
@@ -54,12 +57,14 @@ struct amba_device *acpi_create_amba_device(struct 
acpi_device *adev,
unsigned int i;
unsigned int irq[AMBA_NR_IRQS];
struct clk *clk = ERR_PTR(-ENODEV);
+   char amba_devname[100];
 
/*
 * If the ACPI node already has a physical device attached,
-* skip it.
+* skip it. Except some special devices such as AMD0020 which
+* needs attach physical devices two times.
 */
-   if (adev->physical_node_count)
+   if (adev->physical_node_count && !(quirk->quirk & MULTI_ATTACHED_QUIRK))
return NULL;
 
INIT_LIST_HEAD(_list);
@@ -85,7 +90,24 @@ struct amba_device *acpi_create_amba_device(struct 
acpi_device *adev,
memcpy(resource, rentry->res, sizeof(struct resource));
}
 
-   amba_dev = amba_device_alloc(dev_name(>dev),
+   /*
+* The memory address of AMD pl330 has an offset of ACPI
+* mem resource.
+*/
+   if (quirk->quirk & BASE_OFFSET_QUIRK)
+   resource->start += quirk->base_offset;
+
+   /*
+* If the ACPI device already has a node attached. It must be
+* renamed.
+*/
+   if (quirk->quirk & MULTI_ATTACHED_QUIRK)
+   sprintf(amba_devname, "%s%s", dev_name(>dev), "DMA");
+   else
+   memcpy(amba_devname, dev_name(>dev),
+  strlen(dev_name(>dev)));
+
+   amba_dev = amba_device_alloc(amba_devname,
 resource->start,
 resource_size(resource));
 
@@ -136,6 +158,7 @@ struct amba_device *acpi_create_amba_device(struct 
acpi_device *adev,
if (ret)
goto amba_register_err;
 
+   amba_dev->dev.init_name = NULL;
ret = amba_device_add(amba_dev, resource);
if (ret)
goto amba_register_err;
diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c
index a450e7a..eb3316a 100644
--- a/drivers/acpi/acpi_apd.c
+++ b/drivers/acpi/acpi_apd.c
@@ -3,7 +3,8 @@
  *
  * Copyright (c) 2014,2015 AMD Corporation.
  * Authors: Ken Xue 
- * Wu, Jeff 
+ *  Jeff Wu <15618388...@163.com>
+ * Wang Hongcheng 
  *
  * 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
@@ -17,6 +18,10 @@
 #include 
 #include 
 #include 
+#include 
+#include 
+#include 
+#include 
 
 #include "internal.h"
 
@@ -31,14 +36,15 @@ struct apd_private_data;
 #define ACPI_APD_PMBIT(1)
 
 /**
- * struct apd_device_desc - a descriptor for apd device
- * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM
+ * struct apd_device_desc - a descriptor for apd device.
+ * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM;
  * @fixed_clk_rate: fixed rate input clock source for acpi device;
- * 0 means no fixed rate input clock source
- * @setup: a hook routine to set device resource during create platform device
+ *0 means no fixed rate input clock source;
+ * @clk_con_id: name of input clock source;
+ * @setup: a hook routine to set device resource during create platform device.
  *
- * Device description defined as acpi_device_id.driver_data
- */
+ * Device description defined as acpi_device_id.driver_data.
+*/
 struct apd_device_desc 

[PATCH 3/9] ACPI: add struct acpi_amba_quirk for AMD pl330 specific device config

2015-12-03 Thread Wang Hongcheng
AMD pl330 is a UART DMA device, it shares one ACPI item with UART. So
a platform device and an acpi device will be created according to
AMD0020 ACPI dev. And its mem base address must have an offset. As a
result, MULTI_ATTACHED_QUIRK and MULTI_ATTACHED_QUIRK are used.

Signed-off-by: Wang Hongcheng 
---
 drivers/acpi/acpi_amba.c | 31 +++
 drivers/acpi/acpi_apd.c  | 56 +---
 include/linux/acpi.h | 13 +--
 3 files changed, 81 insertions(+), 19 deletions(-)

diff --git a/drivers/acpi/acpi_amba.c b/drivers/acpi/acpi_amba.c
index 4f0366a..8a5269c 100644
--- a/drivers/acpi/acpi_amba.c
+++ b/drivers/acpi/acpi_amba.c
@@ -31,6 +31,8 @@ ACPI_MODULE_NAME("amba");
  * @periphid: AMBA device periphid.
  * @fixed_rate: Clock frequency.
  * @pdata: Platform data specific to the device.
+ * @quirk: Specific device config, including device multiattach.
+ * and mem base offset.
  *
  * Check if the given @adev can be represented as an AMBA device and, if
  * that's the case, create and register an AMBA device, populate its
@@ -42,7 +44,8 @@ ACPI_MODULE_NAME("amba");
 struct amba_device *acpi_create_amba_device(struct acpi_device *adev,
unsigned int periphid,
unsigned long fixed_rate,
-   void *pdata)
+   void *pdata,
+   struct acpi_amba_quirk *quirk)
 {
struct amba_device *amba_dev = NULL;
struct device *parent;
@@ -54,12 +57,14 @@ struct amba_device *acpi_create_amba_device(struct 
acpi_device *adev,
unsigned int i;
unsigned int irq[AMBA_NR_IRQS];
struct clk *clk = ERR_PTR(-ENODEV);
+   char amba_devname[100];
 
/*
 * If the ACPI node already has a physical device attached,
-* skip it.
+* skip it. Except some special devices such as AMD0020 which
+* needs attach physical devices two times.
 */
-   if (adev->physical_node_count)
+   if (adev->physical_node_count && !(quirk->quirk & MULTI_ATTACHED_QUIRK))
return NULL;
 
INIT_LIST_HEAD(_list);
@@ -85,7 +90,24 @@ struct amba_device *acpi_create_amba_device(struct 
acpi_device *adev,
memcpy(resource, rentry->res, sizeof(struct resource));
}
 
-   amba_dev = amba_device_alloc(dev_name(>dev),
+   /*
+* The memory address of AMD pl330 has an offset of ACPI
+* mem resource.
+*/
+   if (quirk->quirk & BASE_OFFSET_QUIRK)
+   resource->start += quirk->base_offset;
+
+   /*
+* If the ACPI device already has a node attached. It must be
+* renamed.
+*/
+   if (quirk->quirk & MULTI_ATTACHED_QUIRK)
+   sprintf(amba_devname, "%s%s", dev_name(>dev), "DMA");
+   else
+   memcpy(amba_devname, dev_name(>dev),
+  strlen(dev_name(>dev)));
+
+   amba_dev = amba_device_alloc(amba_devname,
 resource->start,
 resource_size(resource));
 
@@ -136,6 +158,7 @@ struct amba_device *acpi_create_amba_device(struct 
acpi_device *adev,
if (ret)
goto amba_register_err;
 
+   amba_dev->dev.init_name = NULL;
ret = amba_device_add(amba_dev, resource);
if (ret)
goto amba_register_err;
diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c
index a450e7a..eb3316a 100644
--- a/drivers/acpi/acpi_apd.c
+++ b/drivers/acpi/acpi_apd.c
@@ -3,7 +3,8 @@
  *
  * Copyright (c) 2014,2015 AMD Corporation.
  * Authors: Ken Xue 
- * Wu, Jeff 
+ *  Jeff Wu <15618388...@163.com>
+ * Wang Hongcheng 
  *
  * 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
@@ -17,6 +18,10 @@
 #include 
 #include 
 #include 
+#include 
+#include 
+#include 
+#include 
 
 #include "internal.h"
 
@@ -31,14 +36,15 @@ struct apd_private_data;
 #define ACPI_APD_PMBIT(1)
 
 /**
- * struct apd_device_desc - a descriptor for apd device
- * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM
+ * struct apd_device_desc - a descriptor for apd device.
+ * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM;
  * @fixed_clk_rate: fixed rate input clock source for acpi device;
- * 0 means no fixed rate input clock source
- * @setup: a hook routine to set device resource during create platform device
+ *0 means no fixed rate input clock source;
+ * @clk_con_id: name of input clock source;
+ * @setup: a hook routine to set device resource during create platform device.
  *
- * Device description defined as acpi_device_id.driver_data
- */
+ * Device