On 01/12/2024 18:50, Marek Vasut wrote:
> On 11/20/24 10:48 AM, Paul Barker wrote:
>> On the RZ/G2L SoC family, the direction of the Ethernet TXC/TX_CLK
>> signal is selectable to support an Ethernet PHY operating in either MII
>> or RGMII mode. By default, the signal is configured as an input and MII
>> mode is supported. The ETH_MODE register can be modified to configure
>> this signal as an output to support RGMII mode.
>>
>> As this signal is be default an input, and can optionally be switched to
>> an output, it maps neatly onto an `output-enable` property in the device
>> tree.
>>
>> Signed-off-by: Paul Barker <paul.barker...@bp.renesas.com>
>> ---
>> Changes v1->v2:
>>    - Split out of series adding RZ/G2L Ethernet support [1]
>>
>> [1]: 
>> https://lore.kernel.org/all/20241024152448.102-1-paul.barker...@bp.renesas.com/
>>
>>   drivers/pinctrl/renesas/rzg2l-pfc.c | 31 +++++++++++++++++++++++++++--
>>   include/renesas/rzg2l-pfc.h         |  2 ++
>>   2 files changed, 31 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/pinctrl/renesas/rzg2l-pfc.c 
>> b/drivers/pinctrl/renesas/rzg2l-pfc.c
>> index 0098e2d52d57..af371bd0ff1e 100644
>> --- a/drivers/pinctrl/renesas/rzg2l-pfc.c
>> +++ b/drivers/pinctrl/renesas/rzg2l-pfc.c
>> @@ -180,7 +180,7 @@ static const u32 r9a07g044_gpio_configs[] = {
>>      RZG2L_GPIO_PORT_PACK(3, 0x21, RZG2L_MPXED_PIN_FUNCS),
>>      RZG2L_GPIO_PORT_PACK(2, 0x22, RZG2L_MPXED_PIN_FUNCS),
>>      RZG2L_GPIO_PORT_PACK(2, 0x23, RZG2L_MPXED_PIN_FUNCS),
>> -    RZG2L_GPIO_PORT_PACK(3, 0x24, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
>> +    RZG2L_GPIO_PORT_PACK(3, 0x24, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0) | PIN_CFG_OEN),
>>      RZG2L_GPIO_PORT_PACK(2, 0x25, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
>>      RZG2L_GPIO_PORT_PACK(2, 0x26, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
>>      RZG2L_GPIO_PORT_PACK(2, 0x27, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
>> @@ -189,7 +189,7 @@ static const u32 r9a07g044_gpio_configs[] = {
>>      RZG2L_GPIO_PORT_PACK(2, 0x2a, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
>>      RZG2L_GPIO_PORT_PACK(2, 0x2b, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
>>      RZG2L_GPIO_PORT_PACK(2, 0x2c, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
>> -    RZG2L_GPIO_PORT_PACK(2, 0x2d, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
>> +    RZG2L_GPIO_PORT_PACK(2, 0x2d, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1) | PIN_CFG_OEN),
>>      RZG2L_GPIO_PORT_PACK(2, 0x2e, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
>>      RZG2L_GPIO_PORT_PACK(2, 0x2f, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
>>      RZG2L_GPIO_PORT_PACK(2, 0x30, 
>> RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
>> @@ -449,6 +449,32 @@ static int rzg2l_pinconf_set(struct udevice *dev, 
>> unsigned int pin_selector,
>>              break;
>>      }
>>   
>> +    case PIN_CONFIG_OUTPUT_ENABLE: {
>> +            u8 ch;
>> +
>> +            if (!(cfg & PIN_CFG_OEN)) {
>> +                    dev_err(dev, "pin does not support OEN\n");
>> +                    return -EINVAL;
>> +            }
>> +
>> +            /*
>> +             * We can determine which Ethernet interface we're dealing with 
>> from
>> +             * the caps.
>> +             */
>> +            if (cfg & PIN_CFG_IO_VMC_ETH0)
>> +                    ch = 0;
>> +            else /* PIN_CFG_IO_VMC_ETH1 */
>> +                    ch = 1;
>> +
>> +            dev_dbg(dev, "set ETH%u TXC OEN=%u\n", ch, argument);
>> +            if (argument)
>> +                    clrbits_8(data->base + ETH_MODE, BIT(ch));
>> +            else
>> +                    setbits_8(data->base + ETH_MODE, BIT(ch));
>> +
>> +            break;
>> +    }
>> +
>>      default:
>>              dev_err(dev, "Invalid pinconf parameter\n");
>>              return -EOPNOTSUPP;
>> @@ -542,6 +568,7 @@ static int rzg2l_get_pin_muxing(struct udevice *dev, 
>> unsigned int selector,
>>   
>>   static const struct pinconf_param rzg2l_pinconf_params[] = {
>>      { "input-enable",       PIN_CONFIG_INPUT_ENABLE,        1 },
>> +    { "output-enable",      PIN_CONFIG_OUTPUT_ENABLE,       1 },
>>      { "power-source",       PIN_CONFIG_POWER_SOURCE,        3300 /* mV */ },
>>   };
>>   
>> diff --git a/include/renesas/rzg2l-pfc.h b/include/renesas/rzg2l-pfc.h
>> index d1015b1d2ac1..36fa8da8e2e4 100644
>> --- a/include/renesas/rzg2l-pfc.h
>> +++ b/include/renesas/rzg2l-pfc.h
>> @@ -22,6 +22,7 @@
>>   #define PIN_CFG_FILONOFF           BIT(10)
>>   #define PIN_CFG_FILNUM                     BIT(11)
>>   #define PIN_CFG_FILCLKSEL          BIT(12)
>> +#define PIN_CFG_OEN                 BIT(13)
>>   
>>   #define RZG2L_MPXED_PIN_FUNCS              (PIN_CFG_IOLH_A | \
>>                                       PIN_CFG_SR | \
>> @@ -79,6 +80,7 @@
>>   #define SD_CH(n)           (0x3000 + (n) * 4)
>>   #define ETH_POC(ch)                (0x300c + (ch) * 4)
>>   #define QSPI                       0x3008
>> +#define ETH_MODE            (0x3018)
> Parenthesis unnecessary around the 0x3018 , I can fix it while applying?

Thanks for fixing this up!

-- 
Paul Barker

Attachment: OpenPGP_0x27F4B3459F002257.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to