mlxsw: i2c: Extend initialization by querying resources data
authorVadim Pasternak <vadimp@mellanox.com>
Sun, 3 Mar 2019 09:12:16 +0000 (09:12 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Mar 2019 06:23:00 +0000 (22:23 -0800)
Extend initialization flow by query requests for chip resources data in
order to obtain chip's specific capabilities, like the number of ports.

Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/i2c.c
drivers/net/ethernet/mellanox/mlxsw/minimal.c

index 4708acc778e040a7deac44df3e15e4a3e087c348..06aea199951882c9d83d20ff0032f86f3c423d47 100644 (file)
@@ -14,6 +14,7 @@
 #include "cmd.h"
 #include "core.h"
 #include "i2c.h"
+#include "resources.h"
 
 #define MLXSW_I2C_CIR2_BASE            0x72000
 #define MLXSW_I2C_CIR_STATUS_OFF       0x18
@@ -499,10 +500,19 @@ mlxsw_i2c_init(void *bus_priv, struct mlxsw_core *mlxsw_core,
               struct mlxsw_res *res)
 {
        struct mlxsw_i2c *mlxsw_i2c = bus_priv;
+       char *mbox;
+       int err;
 
        mlxsw_i2c->core = mlxsw_core;
 
-       return 0;
+       mbox = mlxsw_cmd_mbox_alloc();
+       if (!mbox)
+               return -ENOMEM;
+
+       err = mlxsw_core_resources_query(mlxsw_core, mbox, res);
+
+       mlxsw_cmd_mbox_free(mbox);
+       return err;
 }
 
 static void mlxsw_i2c_fini(void *bus_priv)
index 9108149640b23b5bf9e384c8b4d3f20f2b2b5806..68bee9572a1b015067dab62c0e1b29903a29ddb4 100644 (file)
@@ -333,11 +333,12 @@ static void mlxsw_m_fini(struct mlxsw_core *mlxsw_core)
 static const struct mlxsw_config_profile mlxsw_m_config_profile;
 
 static struct mlxsw_driver mlxsw_m_driver = {
-       .kind           = mlxsw_m_driver_name,
-       .priv_size      = sizeof(struct mlxsw_m),
-       .init           = mlxsw_m_init,
-       .fini           = mlxsw_m_fini,
-       .profile        = &mlxsw_m_config_profile,
+       .kind                   = mlxsw_m_driver_name,
+       .priv_size              = sizeof(struct mlxsw_m),
+       .init                   = mlxsw_m_init,
+       .fini                   = mlxsw_m_fini,
+       .profile                = &mlxsw_m_config_profile,
+       .res_query_enabled      = true,
 };
 
 static const struct i2c_device_id mlxsw_m_i2c_id[] = {