mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Arnd Bergmann" <arnd@arndb.de>
To: arturs.artamonovs@analog.com,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Will Deacon" <will@kernel.org>,
	"Greg Malysa" <greg.malysa@timesys.com>,
	"Philipp Zabel" <p.zabel@pengutronix.de>,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Utsav Agarwal" <Utsav.Agarwal@analog.com>,
	"Michael Turquette" <mturquette@baylibre.com>,
	"Stephen Boyd" <sboyd@kernel.org>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Bartosz Golaszewski" <brgl@bgdev.pl>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Andi Shyti" <andi.shyti@kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Jiri Slaby" <jirislaby@kernel.org>,
	"Olof Johansson" <olof@lixom.net>,
	soc@kernel.org
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	linux-clk@vger.kernel.org,
	"open list:GPIO SUBSYSTEM" <linux-gpio@vger.kernel.org>,
	linux-i2c@vger.kernel.org, linux-serial@vger.kernel.org,
	adsp-linux@analog.com,
	"Nathan Barrett-Morrison" <nathan.morrison@timesys.com>
Subject: Re: [PATCH 15/21] i2c: Add driver for ADI ADSP-SC5xx platforms
Date: Fri, 13 Sep 2024 07:59:34 +0000	[thread overview]
Message-ID: <c1bdcf44-ce2f-4350-b9d9-053c4d99875e@app.fastmail.com> (raw)
In-Reply-To: <20240912-test-v1-15-458fa57c8ccf@analog.com>

On Thu, Sep 12, 2024, at 18:25, Arturs Artamonovs via B4 Relay wrote:
> +
> +config I2C_ADI_TWI_CLK_KHZ
> +    int "ADI TWI I2C clock (kHz)"
> +    depends on I2C_ADI_TWI
> +    range 21 400
> +    default 50
> +    help
> +      The unit of the TWI clock is kHz.

This does not look like something that should be a compile-time
option, the kernel needs to be able to run on different
configurations.

> +
> +static void adi_twi_handle_interrupt(struct adi_twi_iface *iface,
> +					unsigned short twi_int_status,
> +					bool polling)
> +{
> +	u16 writeValue;
> +	unsigned short mast_stat = ioread16(&iface->regs_base->master_stat);

It's a bit unusual to use ioread16()/iowrite16() instead of the
normal readw()/writew().

> +			} else if (iface->cur_mode == TWI_I2C_MODE_REPEAT &&
> +				   iface->cur_msg + 1 < iface->msg_num) {
> +
> +				if (iface->pmsg[iface->cur_msg + 1].flags & I2C_M_RD) {
> +					writeValue = ioread16(&iface->regs_base->master_ctl)
> +							      | MDIR;
> +					iowrite16(writeValue, &iface->regs_base->master_ctl);
> +				} else {
> +					writeValue = ioread16(&iface->regs_base->master_ctl)
> +							      & ~MDIR;
> +					iowrite16(writeValue, &iface->regs_base->master_ctl);

The use of a structure instead of register offset macros makes
these lines rather long, especially at five levels of indentation.
Maybe this can be restructured for readability.

> +		if (ioread16(&iface->regs_base->master_stat) & SDASEN) {
> +			int cnt = 9;
> +
> +			do {
> +				iowrite16(SCLOVR, &iface->regs_base->master_ctl);
> +				udelay(6);
> +				iowrite16(0, &iface->regs_base->master_ctl);
> +				udelay(6);
> +			} while ((ioread16(&iface->regs_base->master_stat) & SDASEN)

Since writes on device mappings are posted, the delay between
the two iowrite16() is not really meaningful, unless you add
another ioread16() or readw() before the delay. Mapping these
with ioremap_np() should also work.

> +			iowrite16(SDAOVR | SCLOVR, &iface->regs_base->master_ctl);
> +			udelay(6);
> +			iowrite16(SDAOVR, &iface->regs_base->master_ctl);
> +			udelay(6);
> +			iowrite16(0, &iface->regs_base->master_ctl);
> +		}

Same here.

> +/* Interrupt handler */
> +static irqreturn_t adi_twi_handle_all_interrupts(struct adi_twi_iface 
> *iface,
> +						 bool polling)
> +{
> +	irqreturn_t handled = IRQ_NONE;
> +	unsigned short twi_int_status;
> +
> +	while (1) {
> +		twi_int_status = ioread16(&iface->regs_base->int_stat);
> +		if (!twi_int_status)
> +			return handled;
> +		/* Clear interrupt status */
> +		iowrite16(twi_int_status, &iface->regs_base->int_stat);
> +		adi_twi_handle_interrupt(iface, twi_int_status, polling);
> +		handled = IRQ_HANDLED;
> +	}
> +}
> +
> +static irqreturn_t adi_twi_interrupt_entry(int irq, void *dev_id)
> +{
> +	struct adi_twi_iface *iface = dev_id;
> +	unsigned long flags;
> +	irqreturn_t handled;
> +
> +	spin_lock_irqsave(&iface->lock, flags);
> +	handled = adi_twi_handle_all_interrupts(iface, false);
> +	spin_unlock_irqrestore(&iface->lock, flags);
> +	return handled;
> +}

Interrupt handlers are called with IRQs disabled, so no
need to turn them off again.

> +static SIMPLE_DEV_PM_OPS(i2c_adi_twi_pm,
> +			 i2c_adi_twi_suspend, i2c_adi_twi_resume);
> +#define I2C_ADI_TWI_PM_OPS	(&i2c_adi_twi_pm)
> +#else
> +#define I2C_ADI_TWI_PM_OPS	NULL
> +#endif

Please convert to DEFINE_SIMPLE_DEV_PM_OPS() and remove the
#ifdef.

> +#ifdef CONFIG_OF
> +static const struct of_device_id adi_twi_of_match[] = {
> +	{
> +		.compatible = "adi,twi",
> +	},
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, adi_twi_of_match);
> +#endif

No need to optimize for non-CONFIG_OF builds, we don't
support traditional board files on arm64.

> +	match = of_match_device(of_match_ptr(adi_twi_of_match), &pdev->dev);

This of_match_ptr() and the second one later should also
get removed then.

> \ No newline at end of file
>

Whitespace damage.

      Arnd

  reply	other threads:[~2024-09-13  7:59 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-12 18:24 [PATCH 00/21] Adding support of ADI ARMv8 ADSP-SC598 SoC Arturs Artamonovs via B4 Relay
2024-09-12 18:24 ` [PATCH 01/21] arm64: Add ADI " Arturs Artamonovs via B4 Relay
2024-09-13  8:16   ` Arnd Bergmann
2024-09-13  9:54     ` Artamonovs, Arturs
2024-09-14 17:15   ` Markus Elfring
2024-09-14 17:56     ` Greg Kroah-Hartman
2024-09-16  6:42   ` Krzysztof Kozlowski
2024-09-12 18:24 ` [PATCH 02/21] reset: Add driver for ADI ADSP-SC5xx reset controller Arturs Artamonovs via B4 Relay
2024-09-13  7:22   ` Arnd Bergmann
2024-09-12 18:24 ` [PATCH 03/21] dt-bindigs: arm64: adi,sc598 bindings Arturs Artamonovs via B4 Relay
2024-09-13 22:05   ` Rob Herring
2024-09-16  6:44   ` Krzysztof Kozlowski
2024-09-12 18:24 ` [PATCH 04/21] dt-bindings: arm64: adi,sc598: Add ADSP-SC598 SoC bindings Arturs Artamonovs via B4 Relay
2024-09-16  6:45   ` Krzysztof Kozlowski
2024-09-12 18:24 ` [PATCH 05/21] clock:Add driver for ADI ADSP-SC5xx PLL Arturs Artamonovs via B4 Relay
2024-09-13  7:27   ` Arnd Bergmann
2024-09-16  6:46   ` Krzysztof Kozlowski
2024-09-12 18:24 ` [PATCH 06/21] include: dt-binding: clock: add adi clock header file Arturs Artamonovs via B4 Relay
2024-09-13  7:35   ` Arnd Bergmann
2024-09-16  6:47   ` Krzysztof Kozlowski
2024-09-16  6:48   ` Krzysztof Kozlowski
2024-09-12 18:24 ` [PATCH 07/21] clock: Add driver for ADI ADSP-SC5xx clock Arturs Artamonovs via B4 Relay
2024-09-14 14:18   ` kernel test robot
2024-09-12 18:24 ` [PATCH 08/21] dt-bindings: clock: adi,sc5xx-clocks: add bindings Arturs Artamonovs via B4 Relay
2024-09-13 22:06   ` Rob Herring
2024-09-12 18:24 ` [PATCH 09/21] gpio: add driver for ADI ADSP-SC5xx platform Arturs Artamonovs via B4 Relay
2024-09-13  7:38   ` Arnd Bergmann
2024-09-14 14:29   ` kernel test robot
2024-09-16  6:50   ` Krzysztof Kozlowski
2024-10-01 12:44   ` Linus Walleij
2024-10-01 14:29     ` Artamonovs, Arturs
2024-10-01 21:57     ` Greg Malysa
2024-10-02 13:53       ` Linus Walleij
2024-09-12 18:24 ` [PATCH 10/21] dt-bindings: gpio: adi,adsp-port-gpio: add bindings Arturs Artamonovs via B4 Relay
2024-09-16  6:53   ` Krzysztof Kozlowski
2024-09-12 18:24 ` [PATCH 11/21] irqchip: Add irqchip for ADI ADSP-SC5xx platform Arturs Artamonovs via B4 Relay
2024-09-13 20:40   ` kernel test robot
2024-09-16  6:56   ` Krzysztof Kozlowski
2024-10-02 10:29   ` Thomas Gleixner
2024-09-12 18:24 ` [PATCH 12/21] dt-bindings: irqchip: adi,adsp-pint: add binding Arturs Artamonovs via B4 Relay
2024-09-16  6:57   ` Krzysztof Kozlowski
2024-09-12 18:24 ` [PATCH 13/21] pinctrl: Add drivers for ADI ADSP-SC5xx platform Arturs Artamonovs via B4 Relay
2024-09-14  2:55   ` kernel test robot
2024-09-12 18:24 ` [PATCH 14/21] dt-bindings: pinctrl: adi,adsp-pinctrl: add bindings Arturs Artamonovs via B4 Relay
2024-09-13 22:09   ` Rob Herring
2024-09-12 18:25 ` [PATCH 15/21] i2c: Add driver for ADI ADSP-SC5xx platforms Arturs Artamonovs via B4 Relay
2024-09-13  7:59   ` Arnd Bergmann [this message]
2024-09-16  7:13   ` Krzysztof Kozlowski
2024-09-12 18:25 ` [PATCH 16/21] dt-bindings: i2c: add i2c/twi driver documentation Arturs Artamonovs via B4 Relay
2024-09-13  7:24   ` Arnd Bergmann
2024-09-12 18:25 ` [PATCH 17/21] serial: adi,uart: Add driver for ADI ADSP-SC5xx Arturs Artamonovs via B4 Relay
2024-09-12 18:25 ` [PATCH 18/21] dt-bindings: serial: adi,uart4: add adi,uart4 driver documentation Arturs Artamonovs via B4 Relay
2024-09-12 20:02   ` Rob Herring (Arm)
2024-09-13 14:06   ` Rob Herring
2024-09-12 18:25 ` [PATCH 19/21] arm64: dts: adi: sc598: add device tree Arturs Artamonovs via B4 Relay
2024-09-13  8:05   ` Arnd Bergmann
2024-09-16  7:04   ` Krzysztof Kozlowski
2024-09-12 18:25 ` [PATCH 20/21] arm64: defconfig: sc598 add minimal changes Arturs Artamonovs via B4 Relay
2024-09-13  7:44   ` Arnd Bergmann
2024-09-16  6:58   ` Krzysztof Kozlowski
2024-09-12 18:25 ` [PATCH 21/21] MAINTAINERS: add adi sc5xx maintainers Arturs Artamonovs via B4 Relay
2024-09-12 21:04 ` [PATCH 00/21] Adding support of ADI ARMv8 ADSP-SC598 SoC Rob Herring (Arm)
2024-09-16  6:57   ` Krzysztof Kozlowski
2024-09-13  8:20 ` Arnd Bergmann
2024-09-16  9:05 ` Krzysztof Kozlowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c1bdcf44-ce2f-4350-b9d9-053c4d99875e@app.fastmail.com \
    --to=arnd@arndb.de \
    --cc=Utsav.Agarwal@analog.com \
    --cc=adsp-linux@analog.com \
    --cc=andi.shyti@kernel.org \
    --cc=arturs.artamonovs@analog.com \
    --cc=brgl@bgdev.pl \
    --cc=catalin.marinas@arm.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=greg.malysa@timesys.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=mturquette@baylibre.com \
    --cc=nathan.morrison@timesys.com \
    --cc=olof@lixom.net \
    --cc=p.zabel@pengutronix.de \
    --cc=robh@kernel.org \
    --cc=sboyd@kernel.org \
    --cc=soc@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®