lkml.org 
[lkml]   [2023]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 net-next 13/13] mfd: ocelot: add external ocelot switch control
    Date
    Utilize the existing ocelot MFD interface to add switch functionality to
    the Microsemi VSC7512 chip.

    Signed-off-by: Colin Foster <colin.foster@in-advantage.com>
    Acked-for-MFD-by: Lee Jones <lee@kernel.org>
    ---

    v5
    * Add Acked-for-MFD Lee tag
    * Remove OCELOT_REG_NAME_ macros

    v4
    * Integrate a different patch, so now this one
    - Adds the resources during this patch. Previouisly this
    was done in a separate patch
    - Utilize the standard {,num_}resources initializer

    v3
    * No change

    v2
    * New patch, broken out from a previous one

    ---
    drivers/mfd/ocelot-core.c | 60 +++++++++++++++++++++++++++++++++++++++
    1 file changed, 60 insertions(+)

    diff --git a/drivers/mfd/ocelot-core.c b/drivers/mfd/ocelot-core.c
    index 013e83173062..b0ff05c1759f 100644
    --- a/drivers/mfd/ocelot-core.c
    +++ b/drivers/mfd/ocelot-core.c
    @@ -45,6 +45,39 @@
    #define VSC7512_SIO_CTRL_RES_START 0x710700f8
    #define VSC7512_SIO_CTRL_RES_SIZE 0x00000100

    +#define VSC7512_ANA_RES_START 0x71880000
    +#define VSC7512_ANA_RES_SIZE 0x00010000
    +
    +#define VSC7512_QS_RES_START 0x71080000
    +#define VSC7512_QS_RES_SIZE 0x00000100
    +
    +#define VSC7512_QSYS_RES_START 0x71800000
    +#define VSC7512_QSYS_RES_SIZE 0x00200000
    +
    +#define VSC7512_REW_RES_START 0x71030000
    +#define VSC7512_REW_RES_SIZE 0x00010000
    +
    +#define VSC7512_SYS_RES_START 0x71010000
    +#define VSC7512_SYS_RES_SIZE 0x00010000
    +
    +#define VSC7512_S0_RES_START 0x71040000
    +#define VSC7512_S1_RES_START 0x71050000
    +#define VSC7512_S2_RES_START 0x71060000
    +#define VCAP_RES_SIZE 0x00000400
    +
    +#define VSC7512_PORT_0_RES_START 0x711e0000
    +#define VSC7512_PORT_1_RES_START 0x711f0000
    +#define VSC7512_PORT_2_RES_START 0x71200000
    +#define VSC7512_PORT_3_RES_START 0x71210000
    +#define VSC7512_PORT_4_RES_START 0x71220000
    +#define VSC7512_PORT_5_RES_START 0x71230000
    +#define VSC7512_PORT_6_RES_START 0x71240000
    +#define VSC7512_PORT_7_RES_START 0x71250000
    +#define VSC7512_PORT_8_RES_START 0x71260000
    +#define VSC7512_PORT_9_RES_START 0x71270000
    +#define VSC7512_PORT_10_RES_START 0x71280000
    +#define VSC7512_PORT_RES_SIZE 0x00010000
    +
    #define VSC7512_GCB_RST_SLEEP_US 100
    #define VSC7512_GCB_RST_TIMEOUT_US 100000

    @@ -96,6 +129,28 @@ static const struct resource vsc7512_sgpio_resources[] = {
    DEFINE_RES_REG_NAMED(VSC7512_SIO_CTRL_RES_START, VSC7512_SIO_CTRL_RES_SIZE, "gcb_sio"),
    };

    +static const struct resource vsc7512_switch_resources[] = {
    + DEFINE_RES_REG_NAMED(VSC7512_ANA_RES_START, VSC7512_ANA_RES_SIZE, "ana"),
    + DEFINE_RES_REG_NAMED(VSC7512_QS_RES_START, VSC7512_QS_RES_SIZE, "qs"),
    + DEFINE_RES_REG_NAMED(VSC7512_QSYS_RES_START, VSC7512_QSYS_RES_SIZE, "qsys"),
    + DEFINE_RES_REG_NAMED(VSC7512_REW_RES_START, VSC7512_REW_RES_SIZE, "rew"),
    + DEFINE_RES_REG_NAMED(VSC7512_SYS_RES_START, VSC7512_SYS_RES_SIZE, "sys"),
    + DEFINE_RES_REG_NAMED(VSC7512_S0_RES_START, VCAP_RES_SIZE, "s0"),
    + DEFINE_RES_REG_NAMED(VSC7512_S1_RES_START, VCAP_RES_SIZE, "s1"),
    + DEFINE_RES_REG_NAMED(VSC7512_S2_RES_START, VCAP_RES_SIZE, "s2"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_0_RES_START, VSC7512_PORT_RES_SIZE, "port0"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_1_RES_START, VSC7512_PORT_RES_SIZE, "port1"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_2_RES_START, VSC7512_PORT_RES_SIZE, "port2"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_3_RES_START, VSC7512_PORT_RES_SIZE, "port3"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_4_RES_START, VSC7512_PORT_RES_SIZE, "port4"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_5_RES_START, VSC7512_PORT_RES_SIZE, "port5"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_6_RES_START, VSC7512_PORT_RES_SIZE, "port6"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_7_RES_START, VSC7512_PORT_RES_SIZE, "port7"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_8_RES_START, VSC7512_PORT_RES_SIZE, "port8"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_9_RES_START, VSC7512_PORT_RES_SIZE, "port9"),
    + DEFINE_RES_REG_NAMED(VSC7512_PORT_10_RES_START, VSC7512_PORT_RES_SIZE, "port10")
    +};
    +
    static const struct mfd_cell vsc7512_devs[] = {
    {
    .name = "ocelot-pinctrl",
    @@ -121,6 +176,11 @@ static const struct mfd_cell vsc7512_devs[] = {
    .use_of_reg = true,
    .num_resources = ARRAY_SIZE(vsc7512_miim1_resources),
    .resources = vsc7512_miim1_resources,
    + }, {
    + .name = "ocelot-switch",
    + .of_compatible = "mscc,vsc7512-switch",
    + .num_resources = ARRAY_SIZE(vsc7512_switch_resources),
    + .resources = vsc7512_switch_resources,
    },
    };

    --
    2.25.1
    \
     
     \ /
      Last update: 2023-03-26 23:59    [W:3.470 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site