2022-06-20 15:24:28

by Marcin Wojtas

[permalink] [raw]
Subject: [net-next: PATCH 12/12] net: dsa: mv88e6xxx: add ACPI support

Previous patches dropped the strict dependency on the OF_* API
in both generic DSA subsystem and the mv88e6xxx driver.
As a result the ACPI support can be introduced by adding
the necessary ID's in the acpi_match_table and a two
minor required adjustments, i.e. different mdiobus registration
and MDIO subnode name, so to conform ACPI namespace requirements [1].

[1] https://uefi.org/specs/ACPI/6.4/05_ACPI_Software_Programming_Model/ACPI_Software_Programming_Model.html#acpi-namespace

Signed-off-by: Marcin Wojtas <[email protected]>
---
drivers/net/dsa/mv88e6xxx/chip.c | 25 ++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 556defa4379d..a74e528184aa 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -10,6 +10,8 @@
* Vivien Didelot <[email protected]>
*/

+#include <linux/acpi.h>
+#include <linux/acpi_mdio.h>
#include <linux/bitfield.h>
#include <linux/delay.h>
#include <linux/dsa/mv88e6xxx.h>
@@ -3913,7 +3915,10 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
goto out;
}

- err = of_mdiobus_register(bus, np);
+ if (is_acpi_node(fwnode))
+ err = acpi_mdiobus_register(bus, fwnode);
+ else
+ err = of_mdiobus_register(bus, np);
if (err) {
dev_err(chip->dev, "Cannot register MDIO bus (%d)\n", err);
mv88e6xxx_g2_irq_mdio_free(chip, bus);
@@ -3952,14 +3957,19 @@ static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip)
static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip,
struct fwnode_handle *fwnode)
{
+ char mdio_node_name[] = "mdio";
struct fwnode_handle *child;
int err;

+ /* Update subnode name if operating in the ACPI world. */
+ if (is_acpi_node(fwnode))
+ strncpy(mdio_node_name, "MDIO", ACPI_NAMESEG_SIZE);
+
/* Always register one mdio bus for the internal/default mdio
* bus. This maybe represented in the device tree, but is
* optional.
*/
- child = fwnode_get_named_child_node(fwnode, "mdio");
+ child = fwnode_get_named_child_node(fwnode, mdio_node_name);
err = mv88e6xxx_mdio_register(chip, child, false);
fwnode_handle_put(child);
if (err)
@@ -7177,6 +7187,16 @@ static const struct of_device_id mv88e6xxx_of_match[] = {

MODULE_DEVICE_TABLE(of, mv88e6xxx_of_match);

+#ifdef CONFIG_ACPI
+static const struct acpi_device_id sdhci_mv88e6xxx_acpi_ids[] = {
+ { .id = "MRVL0120", (kernel_ulong_t)&mv88e6xxx_table[MV88E6085]},
+ { .id = "MRVL0121", (kernel_ulong_t)&mv88e6xxx_table[MV88E6190]},
+ { .id = "MRVL0122", (kernel_ulong_t)&mv88e6xxx_table[MV88E6250]},
+ {}
+};
+MODULE_DEVICE_TABLE(acpi, sdhci_mv88e6xxx_acpi_ids);
+#endif
+
static struct mdio_driver mv88e6xxx_driver = {
.probe = mv88e6xxx_probe,
.remove = mv88e6xxx_remove,
@@ -7184,6 +7204,7 @@ static struct mdio_driver mv88e6xxx_driver = {
.mdiodrv.driver = {
.name = "mv88e6085",
.of_match_table = mv88e6xxx_of_match,
+ .acpi_match_table = ACPI_PTR(sdhci_mv88e6xxx_acpi_ids),
.pm = &mv88e6xxx_pm_ops,
},
};
--
2.29.0


2022-06-25 04:11:01

by kernel test robot

[permalink] [raw]
Subject: Re: [net-next: PATCH 12/12] net: dsa: mv88e6xxx: add ACPI support

Hi Marcin,

I love your patch! Perhaps something to improve:

[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on robh/for-next linus/master v5.19-rc3 next-20220623]
[cannot apply to horms-ipvs/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/intel-lab-lkp/linux/commits/Marcin-Wojtas/ACPI-support-for-DSA/20220620-231646
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
config: ia64-allyesconfig
compiler: ia64-linux-gcc (GCC) 11.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/b3d15b4cbd3c4de7799791e739317bdf6304c6de
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Marcin-Wojtas/ACPI-support-for-DSA/20220620-231646
git checkout b3d15b4cbd3c4de7799791e739317bdf6304c6de
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash drivers/net/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>

All warnings (new ones prefixed by >>):

drivers/net/dsa/mv88e6xxx/chip.c: In function 'mv88e6xxx_mdios_register':
>> drivers/net/dsa/mv88e6xxx/chip.c:3966:17: warning: 'strncpy' output truncated before terminating nul copying 4 bytes from a string of the same length [-Wstringop-truncation]
3966 | strncpy(mdio_node_name, "MDIO", ACPI_NAMESEG_SIZE);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{standard input}: Assembler messages:
{standard input}:1908: Error: Register number out of range 0..1
{standard input}:1908: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1908: Warning: Only the first path encountering the conflict is reported
{standard input}:1906: Warning: This is the location of the conflicting usage
{standard input}:1910: Error: Register number out of range 0..1
{standard input}:1910: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1910: Warning: Only the first path encountering the conflict is reported
{standard input}:1906: Warning: This is the location of the conflicting usage
{standard input}:1910: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1910: Warning: Only the first path encountering the conflict is reported
{standard input}:1908: Warning: This is the location of the conflicting usage
{standard input}:1911: Error: Register number out of range 0..1
{standard input}:1911: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1911: Warning: Only the first path encountering the conflict is reported
{standard input}:1906: Warning: This is the location of the conflicting usage
{standard input}:1911: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1911: Warning: Only the first path encountering the conflict is reported
{standard input}:1908: Warning: This is the location of the conflicting usage
{standard input}:1911: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1911: Warning: Only the first path encountering the conflict is reported
{standard input}:1910: Warning: This is the location of the conflicting usage
{standard input}:1912: Error: Register number out of range 0..1
{standard input}:1912: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1912: Warning: Only the first path encountering the conflict is reported
{standard input}:1906: Warning: This is the location of the conflicting usage
{standard input}:1912: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1912: Warning: Only the first path encountering the conflict is reported
{standard input}:1908: Warning: This is the location of the conflicting usage
{standard input}:1912: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1912: Warning: Only the first path encountering the conflict is reported
{standard input}:1910: Warning: This is the location of the conflicting usage
{standard input}:1912: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1912: Warning: Only the first path encountering the conflict is reported
{standard input}:1911: Warning: This is the location of the conflicting usage
{standard input}:1915: Error: Register number out of range 0..1
{standard input}:1916: Error: Register number out of range 0..1
{standard input}:1916: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 39
{standard input}:1916: Warning: Only the first path encountering the conflict is reported
{standard input}:1915: Warning: This is the location of the conflicting usage
{standard input}:4791: Error: Register number out of range 0..3
{standard input}:4792: Error: Register number out of range 0..3
{standard input}:4792: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 52
{standard input}:4792: Warning: Only the first path encountering the conflict is reported
{standard input}:4791: Warning: This is the location of the conflicting usage
{standard input}:4793: Error: Register number out of range 0..3
{standard input}:4793: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 52
{standard input}:4793: Warning: Only the first path encountering the conflict is reported
{standard input}:4791: Warning: This is the location of the conflicting usage
{standard input}:4793: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 52
{standard input}:4793: Warning: Only the first path encountering the conflict is reported
{standard input}:4792: Warning: This is the location of the conflicting usage
{standard input}:4797: Error: Register number out of range 0..3
{standard input}:5097: Error: Register number out of range 0..2
{standard input}:5097: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:5093: Warning: This is the location of the conflicting usage
{standard input}:5098: Error: Register number out of range 0..2
{standard input}:5098: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:5093: Warning: This is the location of the conflicting usage
{standard input}:5098: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:5097: Warning: This is the location of the conflicting usage
{standard input}:5099: Error: Register number out of range 0..2
{standard input}:5099: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:5093: Warning: This is the location of the conflicting usage
{standard input}:5099: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:5097: Warning: This is the location of the conflicting usage
{standard input}:5099: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:5098: Warning: This is the location of the conflicting usage
{standard input}:5102: Error: Register number out of range 0..2
{standard input}:5103: Error: Register number out of range 0..2
{standard input}:5103: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:5102: Warning: This is the location of the conflicting usage
{standard input}:10057: Error: Register number out of range 0..2
{standard input}:10059: Error: Register number out of range 0..2
{standard input}:10059: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:10059: Warning: Only the first path encountering the conflict is reported
{standard input}:10057: Warning: This is the location of the conflicting usage
{standard input}:10060: Error: Register number out of range 0..2
{standard input}:10060: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:10060: Warning: Only the first path encountering the conflict is reported
{standard input}:10057: Warning: This is the location of the conflicting usage
{standard input}:10060: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:10060: Warning: Only the first path encountering the conflict is reported
{standard input}:10059: Warning: This is the location of the conflicting usage
{standard input}:10061: Error: Register number out of range 0..2
{standard input}:10061: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:10061: Warning: Only the first path encountering the conflict is reported
{standard input}:10057: Warning: This is the location of the conflicting usage
{standard input}:10061: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:10061: Warning: Only the first path encountering the conflict is reported
{standard input}:10059: Warning: This is the location of the conflicting usage
{standard input}:10061: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 40
{standard input}:10061: Warning: Only the first path encountering the conflict is reported
{standard input}:10060: Warning: This is the location of the conflicting usage
{standard input}:10065: Error: Register number out of range 0..2
{standard input}:10390: Error: Register number out of range 0..3
{standard input}:10391: Error: Register number out of range 0..3
{standard input}:10391: Warning: Use of 'mov' violates WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 43


vim +/strncpy +3966 drivers/net/dsa/mv88e6xxx/chip.c

3956
3957 static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip,
3958 struct fwnode_handle *fwnode)
3959 {
3960 char mdio_node_name[] = "mdio";
3961 struct fwnode_handle *child;
3962 int err;
3963
3964 /* Update subnode name if operating in the ACPI world. */
3965 if (is_acpi_node(fwnode))
> 3966 strncpy(mdio_node_name, "MDIO", ACPI_NAMESEG_SIZE);
3967
3968 /* Always register one mdio bus for the internal/default mdio
3969 * bus. This maybe represented in the device tree, but is
3970 * optional.
3971 */
3972 child = fwnode_get_named_child_node(fwnode, mdio_node_name);
3973 err = mv88e6xxx_mdio_register(chip, child, false);
3974 fwnode_handle_put(child);
3975 if (err)
3976 return err;
3977
3978 /* Walk the device tree, and see if there are any other nodes
3979 * which say they are compatible with the external mdio
3980 * bus.
3981 */
3982 fwnode_for_each_available_child_node(fwnode, child) {
3983 if (fwnode_property_match_string(child, "compatible",
3984 "marvell,mv88e6xxx-mdio-external") == 0) {
3985 err = mv88e6xxx_mdio_register(chip, child, true);
3986 if (err) {
3987 mv88e6xxx_mdios_unregister(chip);
3988 fwnode_handle_put(child);
3989 return err;
3990 }
3991 }
3992 }
3993
3994 return 0;
3995 }
3996

--
0-DAY CI Kernel Test Service
https://01.org/lkp


Attachments:
(No filename) (12.69 kB)
config (320.67 kB)
Download all attachments