lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 29 Mar 2017 11:01:02 +0800 From: Hanjun Guo <hanjun.guo@...aro.org> To: ahs3@...hat.com, Marc Zyngier <marc.zyngier@....com>, "Rafael J. Wysocki" <rjw@...ysocki.net>, Lorenzo Pieralisi <lorenzo.pieralisi@....com> CC: linux-acpi@...r.kernel.org, linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org, linuxarm@...wei.com, Thomas Gleixner <tglx@...utronix.de>, Kefeng Wang <wangkefeng.wang@...wei.com>, huxinwei@...wei.com, yimin@...wei.com, MaJun <majun258@...wei.com>, Darren Hart <dvhart@...radead.org> Subject: Re: [Update][PATCH v9.1 15/15] irqchip: mbigen: Add ACPI support On 03/29/2017 03:13 AM, Al Stone wrote: > On 03/28/2017 06:21 AM, Hanjun Guo wrote: [...] >> >> +#ifdef CONFIG_ACPI >> +static int mbigen_acpi_create_domain(struct platform_device *pdev, >> + struct mbigen_device *mgn_chip) >> +{ >> + struct irq_domain *domain; >> + u32 num_pins = 0; >> + int ret; >> + >> + /* >> + * "num-pins" is the total number of interrupt pins implemented in >> + * this mbigen instance, and mbigen is an interrupt controller >> + * connected to ITS converting wired interrupts into MSI, so we >> + * use "num-pins" to alloc MSI vectors which are needed by client >> + * devices connected to it. >> + * >> + * Here is the DSDT device node used for mbigen in firmware: >> + * Device(MBI0) { >> + * Name(_HID, "HISI0152") >> + * Name(_UID, Zero) >> + * Name(_CRS, ResourceTemplate() { >> + * Memory32Fixed(ReadWrite, 0xa0080000, 0x10000) >> + * }) >> + * >> + * Name(_DSD, Package () { >> + * ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), >> + * Package () { >> + * Package () {"num-pins", 378} >> + * } >> + * }) >> + * } >> + */ > > Excellent. These comments I really like. Thanks for doing this! > >> + ret = device_property_read_u32(&pdev->dev, "num-pins", &num_pins); >> + if (ret || num_pins == 0) >> + return -EINVAL; >> + >> + domain = platform_msi_create_device_domain(&pdev->dev, num_pins, >> + mbigen_write_msg, >> + &mbigen_domain_ops, >> + mgn_chip); >> + if (!domain) >> + return -ENOMEM; >> + >> + return 0; >> +} >> +#else >> +static inline int mbigen_acpi_create_domain(struct platform_device *pdev, >> + struct mbigen_device *mgn_chip) >> +{ >> + return -ENODEV; >> +} >> +#endif >> + >> static int mbigen_device_probe(struct platform_device *pdev) >> { >> struct mbigen_device *mgn_chip; >> @@ -289,9 +342,18 @@ static int mbigen_device_probe(struct platform_device *pdev) >> if (IS_ERR(mgn_chip->base)) >> return PTR_ERR(mgn_chip->base); >> >> - err = mbigen_of_create_domain(pdev, mgn_chip); >> - if (err) >> + if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) >> + err = mbigen_of_create_domain(pdev, mgn_chip); >> + else if (ACPI_COMPANION(&pdev->dev)) >> + err = mbigen_acpi_create_domain(pdev, mgn_chip); >> + else >> + err = -EINVAL; >> + >> + if (err) { >> + dev_err(&pdev->dev, "Failed to create mbi-gen@%p irqdomain", >> + mgn_chip->base); >> return err; >> + } >> >> platform_set_drvdata(pdev, mgn_chip); >> return 0; >> @@ -303,10 +365,17 @@ static int mbigen_device_probe(struct platform_device *pdev) >> }; >> MODULE_DEVICE_TABLE(of, mbigen_of_match); >> >> +static const struct acpi_device_id mbigen_acpi_match[] = { >> + { "HISI0152", 0 }, >> + {} >> +}; >> +MODULE_DEVICE_TABLE(acpi, mbigen_acpi_match); >> + >> static struct platform_driver mbigen_platform_driver = { >> .driver = { >> .name = "Hisilicon MBIGEN-V2", >> .of_match_table = mbigen_of_match, >> + .acpi_match_table = ACPI_PTR(mbigen_acpi_match), >> }, >> .probe = mbigen_device_probe, >> }; >> > > All LGTM. > > Reviewed-by: Al Stone <ahs3@...hat.com> Thank you Al :) Marc, Lorenzo, since it's little bit late and urgent, could we merge this version? Thanks Hanjun
Powered by blists - more mailing lists