[PATCH] pinctrl/rockchip: re-fix RK3308 pinmux bits

jay.xu at rock-chips.com jay.xu at rock-chips.com
Fri Sep 30 17:42:25 PDT 2022


Hi Luca:

BR
--------------
jay.xu at rock-chips.com
>Hello Jianqun Xu,
>
>On Fri, 30 Sep 2022 18:26:20 +0800
>Jianqun Xu <jay.xu at rock-chips.com> wrote:
>
>> Part of pins from RK3308 SoCs have two registers to do pinmux, one is
>> the origin register with 2bits named by gpioxx_sel, and another with
>> 3bits and named by gpioxx_sel_plus.
>
>Are the "plus" registers documented anywhere? 

At RK3308 TRM CH5 GRF, 

GRF_SOC_CON13 

3  RW  0x0 gpio2a2_sel_src_ctrl
                  IOMUX control source selection.
                 1'b0: use basic GPIO2A_IOMUX[gpio2a2_sel]
                 1'b1: use gpio2a2_sel_plus instead of GPIO2A_IOMUX[gpio2a2_sel]

2:0  RW  0x0 gpio2a2_sel_plus
                     3'b000: GPIO2_A2
                     3'b001: UART0_CTSN
                     3'b010: SPI0_CLK
                     3'b011: I2C2_SDA
                     3'b100: Reserved
                     3'b101: OWIRE_M2

Sorry I don't know about the trm you got from our company, if you cannot find this part,
may require a new version ?

>
>The reference manual I have does not mention them.
>
>> The default value is 2bits. But Rockchip downstream pinctrl driver has a
>> soc init for RK3308 to switch to the 3bits path. The first patch
>> upstream the support for RK3308 pinctrl but drop the soc init codes.
>>
>> The commit 1f3e25a06883 ("pinctrl: rockchip: fix RK3308 pinmux bits") try
>> to fix back to 2 bits path, but that will makes some iomux not be
>> supported.
>
>Sorry about that, of course I could not know because my documentation
>does not mention those registers. 

Never be mind, that is my mistask when I upstream the support fo rk3308.
The upstream version will lack of function 4-7, but it works well for the function 0-3

Problem happens when I backport these patches to our driver and the uart work bad since our
driver will set it to 3bits path.

Anyway thanks for your patch and could help to do a verify and review for this patch  ?

>
>> @@ -3014,6 +3014,50 @@ static int __maybe_unused rockchip_pinctrl_resume(struct device *dev)
>>  static SIMPLE_DEV_PM_OPS(rockchip_pinctrl_dev_pm_ops, rockchip_pinctrl_suspend,
>>  rockchip_pinctrl_resume);
>> 
>> +
>> +static int rk3308_soc_data_init(struct rockchip_pinctrl *info)
>> +{
>> +	int ret;
>> +
>> +	#define RK3308_GRF_SOC_CON13	(0x608)
>> +	#define RK3308_GRF_SOC_CON15	(0x610)
>> +
>> +	/* RK3308_GRF_SOC_CON13 */
>> +	#define RK3308_GRF_I2C3_IOFUNC_SRC_CTRL	(BIT(16 + 10) | BIT(10))
>> +	#define RK3308_GRF_GPIO2A3_SEL_SRC_CTRL	(BIT(16 + 7)  | BIT(7))
>> +	#define RK3308_GRF_GPIO2A2_SEL_SRC_CTRL	(BIT(16 + 3)  | BIT(3))
>> +
>> +	/* RK3308_GRF_SOC_CON15 */
>> +	#define RK3308_GRF_GPIO2C0_SEL_SRC_CTRL	(BIT(16 + 11) | BIT(11))
>> +	#define RK3308_GRF_GPIO3B3_SEL_SRC_CTRL	(BIT(16 + 7)  | BIT(7))
>> +	#define RK3308_GRF_GPIO3B2_SEL_SRC_CTRL	(BIT(16 + 3)  | BIT(3))
>> +
>> +	/*
>> +	* Enable the special ctrl of selected sources.
>> +	*
>> +	* Example reference to GRF_SOC_CON13 description:
>> +	*
>> +	* gpio2a2_sel_src_ctrl
>> +	* IOMUX control source selection.
>> +	* 1'b0: use basic GPIO2A_IOMUX[gpio2a2_sel]
>> +	* 1'b1: use gpio2a2_sel_plus instead of GPIO2A_IOMUX[gpio2a2_sel]
>> +	*/
>> +
>> +	ret = regmap_write(info->regmap_base, RK3308_GRF_SOC_CON13,
>> +	   RK3308_GRF_I2C3_IOFUNC_SRC_CTRL |
>> +	   RK3308_GRF_GPIO2A3_SEL_SRC_CTRL |
>> +	   RK3308_GRF_GPIO2A2_SEL_SRC_CTRL);
>> +	if (ret)
>> +	return ret;
>> +
>> +	ret = regmap_write(info->regmap_base, RK3308_GRF_SOC_CON15,
>> +	   RK3308_GRF_GPIO2C0_SEL_SRC_CTRL |
>> +	   RK3308_GRF_GPIO3B3_SEL_SRC_CTRL |
>> +	   RK3308_GRF_GPIO3B2_SEL_SRC_CTRL);
>> +
>> +	return ret;
>> +}
>
>This is new code, not code that my patch has removed. Is it needed? How
>did the driver work before without this code?
> 
I set these codes before pinctrl to register. the driver could work with 2bit or 3bit,
but a problem is that if the uboot change it to 3bit, but the kernel not to do any set
then it works bad, that what happend when I backport it.

>I think we need to clarify those registers before applying a fix that
>might create other problems. 

Reference uppper note, part of trm for gpio2_a2

>
>Best regards.
>--
>Luca Ceresoli, Bootlin
>Embedded Linux and Kernel engineering
>https://bootlin.com


More information about the Linux-rockchip mailing list