Commit graph

1,105,074 commits

Author SHA1 Message Date
Lukas Wunner
7e8b617eb9 net: phy: smsc: Cache interrupt mask
Cache the interrupt mask to avoid re-reading it from the PHY upon every
interrupt.

This will simplify a subsequent commit which detects hot-removal in the
interrupt handler and bails out.

Analyzing and debugging PHY transactions also becomes simpler if such
redundant reads are avoided.

Last not least, interrupt overhead and latency is slightly improved.

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:35:46 +01:00
Lukas Wunner
1ce8b37241 usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling
Link status of SMSC LAN95xx chips is polled once per second, even though
they're capable of signaling PHY interrupts through the MAC layer.

Forward those interrupts to the PHY driver to avoid polling.  Benefits
are reduced bus traffic, reduced CPU overhead and quicker interface
bringup.

Polling was introduced in 2016 by commit d69d169493 ("usbnet:
smsc95xx: fix link detection for disabled autonegotiation").
Back then, the LAN95xx driver neglected to enable the ENERGYON interrupt,
hence couldn't detect link-up events when auto-negotiation was disabled.
The proper solution would have been to enable the ENERGYON interrupt
instead of polling.

Since then, PHY handling was moved from the LAN95xx driver to the SMSC
PHY driver with commit 05b35e7eb9 ("smsc95xx: add phylib support").
That PHY driver is capable of link detection with auto-negotiation
disabled because it enables the ENERGYON interrupt.

Note that signaling interrupts through the MAC layer not only works with
the integrated PHY, but also with an external PHY, provided its
interrupt pin is attached to LAN95xx's nPHY_INT pin.

In the unlikely event that the interrupt pin of an external PHY is
attached to a GPIO of the SoC (or not connected at all), the driver can
be amended to retrieve the irq from the PHY's of_node.

To forward PHY interrupts to phylib, it is not sufficient to call
phy_mac_interrupt().  Instead, the PHY's interrupt handler needs to run
so that PHY interrupts are cleared.  That's because according to page
119 of the LAN950x datasheet, "The source of this interrupt is a level.
The interrupt persists until it is cleared in the PHY."

https://www.microchip.com/content/dam/mchp/documents/UNG/ProductDocuments/DataSheets/LAN950x-Data-Sheet-DS00001875D.pdf

Therefore, create an IRQ domain with a single IRQ for the PHY.  In the
future, the IRQ domain may be extended to support the 11 GPIOs on the
LAN95xx.

Normally the PHY interrupt should be masked until the PHY driver has
cleared it.  However masking requires a (sleeping) USB transaction and
interrupts are received in (non-sleepable) softirq context.  I decided
not to mask the interrupt at all (by using the dummy_irq_chip's noop
->irq_mask() callback):  The USB interrupt endpoint is polled in 1 msec
intervals and normally that's sufficient to wake the PHY driver's IRQ
thread and have it clear the interrupt.  If it does take longer, worst
thing that can happen is the IRQ thread is woken again.  No big deal.

Because PHY interrupts are now perpetually enabled, there's no need to
selectively enable them on suspend.  So remove all invocations of
smsc95xx_enable_phy_wakeup_interrupts().

In smsc95xx_resume(), move the call of phy_init_hw() before
usbnet_resume() (which restarts the status URB) to ensure that the PHY
is fully initialized when an interrupt is handled.

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch> # from a PHY perspective
Cc: Andre Edich <andre.edich@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:35:46 +01:00
Lukas Wunner
8960f878e3 usbnet: smsc95xx: Avoid link settings race on interrupt reception
When a PHY interrupt is signaled, the SMSC LAN95xx driver updates the
MAC full duplex mode and PHY flow control registers based on cached data
in struct phy_device:

  smsc95xx_status()                 # raises EVENT_LINK_RESET
    usbnet_deferred_kevent()
      smsc95xx_link_reset()         # uses cached data in phydev

Simultaneously, phylib polls link status once per second and updates
that cached data:

  phy_state_machine()
    phy_check_link_status()
      phy_read_status()
        lan87xx_read_status()
          genphy_read_status()      # updates cached data in phydev

If smsc95xx_link_reset() wins the race against genphy_read_status(),
the registers may be updated based on stale data.

E.g. if the link was previously down, phydev->duplex is set to
DUPLEX_UNKNOWN and that's what smsc95xx_link_reset() will use, even
though genphy_read_status() may update it to DUPLEX_FULL afterwards.

PHY interrupts are currently only enabled on suspend to trigger wakeup,
so the impact of the race is limited, but we're about to enable them
perpetually.

Avoid the race by delaying execution of smsc95xx_link_reset() until
phy_state_machine() has done its job and calls back via
smsc95xx_handle_link_change().

Signaling EVENT_LINK_RESET on wakeup is not necessary because phylib
picks up link status changes through polling.  So drop the declaration
of a ->link_reset() callback.

Note that the semicolon on a line by itself added in smsc95xx_status()
is a placeholder for a function call which will be added in a subsequent
commit.  That function call will actually handle the INT_ENP_PHY_INT_
interrupt.

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:35:46 +01:00
Lukas Wunner
14021da698 usbnet: smsc95xx: Don't reset PHY behind PHY driver's back
smsc95xx_reset() resets the PHY behind the PHY driver's back, which
seems like a bad idea generally.  Remove that portion of the function.

We're about to use PHY interrupts instead of polling to detect link
changes on SMSC LAN95xx chips.  Because smsc95xx_reset() is called from
usbnet_open(), PHY interrupt settings are lost whenever the net_device
is brought up.

There are two other callers of smsc95xx_reset(), namely smsc95xx_bind()
and smsc95xx_reset_resume(), and both may indeed benefit from a PHY
reset.  However they already perform one through their calls to
phy_connect_direct() and phy_init_hw().

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: Martyn Welch <martyn.welch@collabora.com>
Cc: Gabriel Hojda <ghojda@yo2urs.ro>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:35:46 +01:00
Lukas Wunner
3108871f19 usbnet: smsc95xx: Don't clear read-only PHY interrupt
Upon receiving data from the Interrupt Endpoint, the SMSC LAN95xx driver
attempts to clear the signaled interrupts by writing "all ones" to the
Interrupt Status Register.

However the driver only ever enables a single type of interrupt, namely
the PHY Interrupt.  And according to page 119 of the LAN950x datasheet,
its bit in the Interrupt Status Register is read-only.  There's no other
way to clear it than in a separate PHY register:

https://www.microchip.com/content/dam/mchp/documents/UNG/ProductDocuments/DataSheets/LAN950x-Data-Sheet-DS00001875D.pdf

Consequently, writing "all ones" to the Interrupt Status Register is
pointless and can be dropped.

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:35:46 +01:00
Lukas Wunner
d1408f6b4d usbnet: Run unregister_netdev() before unbind() again
Commit 2c9d6c2b87 ("usbnet: run unbind() before unregister_netdev()")
sought to fix a use-after-free on disconnect of USB Ethernet adapters.

It turns out that a different fix is necessary to address the issue:
https://lore.kernel.org/netdev/18b3541e5372bc9b9fc733d422f4e698c089077c.1650177997.git.lukas@wunner.de/

So the commit was not necessary.

The commit made binding and unbinding of USB Ethernet asymmetrical:
Before, usbnet_probe() first invoked the ->bind() callback and then
register_netdev().  usbnet_disconnect() mirrored that by first invoking
unregister_netdev() and then ->unbind().

Since the commit, the order in usbnet_disconnect() is reversed and no
longer mirrors usbnet_probe().

One consequence is that a PHY disconnected (and stopped) in ->unbind()
is afterwards stopped once more by unregister_netdev() as it closes the
netdev before unregistering.  That necessitates a contortion in ->stop()
because the PHY may only be stopped if it hasn't already been
disconnected.

Reverting the commit allows making the call to phy_stop() unconditional
in ->stop().

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Acked-by: Oliver Neukum <oneukum@suse.com>
Cc: Martyn Welch <martyn.welch@collabora.com>
Cc: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:35:46 +01:00
Thomas Gleixner
9e4a51ad8e debugobjects: Convert to SPDX license identifier
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/87v8udpy3u.ffs@tglx
2022-05-13 12:35:17 +02:00
Yang Li
7b8b82224c net: ethernet: fix platform_no_drv_owner.cocci warning
Remove .owner field if calls are used which set it automatically.
./drivers/net/ethernet/sunplus/spl2sw_driver.c:569:3-8: No need to set
.owner here. The core will do it.

Reported-by: Abaci Robot <abaci@linux.alibaba.com>
Signed-off-by: Yang Li <yang.lee@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:31:18 +01:00
Jie Wang
0f6deac3a0 net: page_pool: add page allocation stats for two fast page allocate path
Currently If use page pool allocation stats to analysis a RX performance
degradation problem. These stats only count for pages allocate from
page_pool_alloc_pages. But nic drivers such as hns3 use
page_pool_dev_alloc_frag to allocate pages, so page stats in this API
should also be counted.

Signed-off-by: Jie Wang <wangjie125@huawei.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:28:55 +01:00
Jiapeng Chong
a19cef450b net: ethernet: Use swap() instead of open coding it
Clean the following coccicheck warning:

./drivers/net/ethernet/sunplus/spl2sw_driver.c:217:27-28: WARNING
opportunity for swap().

./drivers/net/ethernet/sunplus/spl2sw_driver.c:222:27-28: WARNING
opportunity for swap().

Reported-by: Abaci Robot <abaci@linux.alibaba.com>
Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-05-13 11:26:59 +01:00
Arnd Bergmann
d4a3b44233 Powerdomain fixes and improvements, some GRF compatible properties
and a rk3566 GRF clocksource default setup.
 -----BEGIN PGP SIGNATURE-----
 
 iQFEBAABCAAuFiEE7v+35S2Q1vLNA3Lx86Z5yZzRHYEFAmJ8Q84QHGhlaWtvQHNu
 dGVjaC5kZQAKCRDzpnnJnNEdgT31B/9d8fq4fBg9mkF6s0CtFMzw/KOO0ybaxcmx
 6KmIbFPOFJfhgXf1EZOl5S555XiIK4Sj24PQA8ySCnu/8jt9SV3dss5rTnaEiG+b
 TTxzndBFITLunvqMNa0wSSeGyQP1Hh5Y9QAEQS9Xy+L4Hnn1t+F8dX92JUEHos9E
 Ox9mPAiTN/dj/FFT8gYTv4gEIwtxf3y0VpwdejeyLkOmIHiwK/Te1nclty9q9aMM
 2OQsSZdF0cAV2oxjEaeVoTRowAWqrlY+RF0px12RFAa/CwrNkW57qHCWKfCjfmoI
 WIJ44bxPWF4OhEG4/sRTYRysklofGRw3dtQSxZlUKbMy9v67pyFU
 =vglc
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmJ+JfUACgkQmmx57+YA
 GNkU7w//ZhChli63CICSuwykKyvgp7esVMmjUZ08WpPHAPrvG/CBKO3QkQbqcixY
 DTtWNnZau4gOEizOmLn7McvSe3K6f1C3HGtgoNIt7JhQFe0b7zDZ9/xRv7lE/u5a
 XxnS/0s/JYzkzXsfsSLEvzV+9cgsRQyO5gD3ZlAtPpbHReNCFjcA44Bzk5eoXgY9
 ZTL/8yryreHc6cnOiERaKyf3+lTfAXcF6gk0q07psFT61ofl4BwQVNe+esKDiU3l
 DqekGWDfF0HWLYWmhXqmFPVIgnuRzlbvBpkb6R8QgTxIvopKWeUFs2GoqPKs1bln
 sVsevaW4GSO138J0K2l+SeeW/KVskSGblZlVEtlQhztD3yOhuVnVabKu+Mc3rNaC
 LzKgt0qjzddtHGwPMbvQdig/XkgCMIy8ZTPLn73BH8kQGmBORBc+pvTlhsgvXCXc
 t/4ixo3jOjDo+fRe2/4cNpPOSqj0Wdm8WYGdwuLs6K42EH553MtVFGLOVN45+Dzd
 5pwzOf9UaDtOcGDQ0mpJztNKWhAn3j6RyvnLnBqDS+pE1Evf5hu1zvRAXaNNKw7b
 9L08VMf27d1eZQqsc3vTBb/M/YNV9zq4DwcaJJCpISCRlDQDqIEUdJSlG3rjV2jo
 YIL85kEnYnx0iuHJYN24JtymttXykdx8Qsk6M8wFkxu/QC7rWZ8=
 =M9KR
 -----END PGP SIGNATURE-----

Merge tag 'v5.19-rockchip-drivers1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into arm/drivers

Powerdomain fixes and improvements, some GRF compatible properties
and a rk3566 GRF clocksource default setup.

* tag 'v5.19-rockchip-drivers1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
  soc: rockchip: Fix compile-testing SoC drivers
  soc: rockchip: power-domain: Replace dsb() with smb()
  soc: rockchip: Clean up Kconfig whitespace
  soc: rockchip: set dwc3 clock for rk3566
  dt-bindings: soc: rockchip: add rk3566-pipe-grf compatible
  soc: rockchip: pm_domains: Fix typo in comment
  dt-bindings: soc: rockchip: add naneng combo phy register compatible

Link: https://lore.kernel.org/r/3998951.tdWV9SEqCh@phil
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-05-13 11:33:41 +02:00
Arnd Bergmann
30258ae65a Comment typo fix.
-----BEGIN PGP SIGNATURE-----
 
 iQFEBAABCAAuFiEE7v+35S2Q1vLNA3Lx86Z5yZzRHYEFAmJ8RHsQHGhlaWtvQHNu
 dGVjaC5kZQAKCRDzpnnJnNEdgbUYCACAn7VQz1sq/oQ6HV6RgKAw1GLYdQIo5idN
 mFiEg3/8gx17xGK/5guqUQH1BViykccqj5S8Z24/+1PkD6IyYohhqw+P1odJKk4D
 Ix5/QbyKnJJP0us2T09qj7RxMg95el3dehEwCmC6+U+3gWmQluAkPyaGPAleqPuL
 MuM8vLmKjMPU0KvB07Q4xAiACJl/PZuQ70T86qfaPlKKEa8EpMIQV2hWn4e0cnBE
 02v5G5Xq/0/6MAxB2FRxNwwPv+eL1P3IQL5utJiyYfayMciiedEz2gORwnhCBLgk
 8VOjs1O/wB/RI1WxN1z51hgmbK2aUyOs/7xONQKRwYv/l/qZvZnV
 =UupA
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmJ+JbsACgkQmmx57+YA
 GNk+Yw/7BICKswhvmRC25jrbsHheVkqr/r+aCZiJWBJxTWj6ae7yrWFKv9iWUcx4
 DL9kJ5dkv8Gnn3WG9Ll5DmjgRtPMWTNMI13ffMcw6Yv6ioAUduIov6wOhTrttfoh
 aE+DuvwQzHyy8ThqtGLkByxCaB0ig3l+d4mjTLHW0vAjaFnJWzlqCy4Uth3K2Try
 PhNrJK0EQoohhPzpMWRZbirPE1ciy4CvAf18WL1qrLLYSBbI3qi/RMgRvRJ++37C
 D5bqhFtplb28hmSSLFHehHb1N0WuinWZNyXSATWElpT14910jBr0JLVA1pAv6Uf6
 LEsK7yz9rALK8MwFT+dy0pjpWEbd76swGPJtu8FMBE3oAHoQOXFdaCRb990wu9cl
 fyctEflqUNxWilwEvahvq0/zji+IdqXPQoM1NPJ56dFG9Z6mjktS4Z6MOBN1iLod
 gpR8LgbuxxVIZ3Gmxhvyy6ff8QLIhRYJ9TV7WxJEH8JV/dKRTzvHxPQAP5c9UyIr
 H4x5xGjNCbIdnrPVsbC7S4Zqin9rO+yfK0SezRosnuADLtWdJEU6IzK8uQBf4f3X
 kAXI4RLEJzUQdPZG+iTS9r9coZLrPXbnMmlizqazMC1bOZxKJZgm4BtTAciocM6b
 00febiGUKfeLQUAG5gC2nAMVAYqlBzoXOyWL1fWSau4q4N032Jc=
 =Llo7
 -----END PGP SIGNATURE-----

Merge tag 'v5.19-rockchip-soc32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into arm/soc

Comment typo fix.

* tag 'v5.19-rockchip-soc32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
  ARM: rockchip: fix typos in comments

Link: https://lore.kernel.org/r/4421093.ElGaqSPkdT@phil
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-05-13 11:32:42 +02:00
Arnd Bergmann
9dd7a5a896 Visconti device tree updates for 5.19
- Update the clock providers for PCIe host controller
 - Update the clock providers for ethernet device
 - Update the clock providers for SPI
 - Update the clock providers for watchdog timer
 - Update the clock providers for I2C
 - Update the clock providers for UART
 - Add clock controller support for TMPV7708
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEXmKe5SMhlzV7hM9DMiR/u0CtH6YFAmJ5zwgACgkQMiR/u0Ct
 H6ZaBRAAkWogBbx/oRL68ITAdOmn2um3xVrv8BNy1fvkhERflBIpBBpde1yGaYRx
 kEvBuMlkZJBuHJuT9HSbY9NHhO8h1maB+BkXNSIGSs3E0bp3zfOVBRklCJs8VfoT
 jMbYSCtusGCuhDOAOpAhgNqR5x0P9VmDo3gPB1pan35Pm8Xv4X1ORm6PuUJob1My
 s6pfvxgnzC43q0pkkkNQa18ISHbdhRlgsBPUHinJT6Sv3jbN7cU9sm1Gf3ZidJZt
 YkLoW4np+1nx4e2eFbbzjBZgIzwdsnwoL/Ie+YLYoPnyL4vA/dlY6KyUH09uaJVi
 2Y3kmWcl9a8IvWnJ+SrO6rrwngLcg9bWW98ry7nsQJUeARN2fSjJMiIXi/fH5F8o
 ai4yjGXFTgAxS8YCoGLwFjpZduwPReqpfYjQ6qQRbUaMV3UA7YA4FJ3RG5aJF+sZ
 nhYAwsBnO3Cm+YaK+5qTFMBFqSJOLsaoOPt8QoWsXEa8pvx0dzwavToi7HyRaJpu
 YCJD5+AvS/dyOoblw62ClQvdaZjAJwuqkrqcHB8J+G5lUC+od6nFVONcr5N6m94w
 zPnCReEINDh4WPlEv+/aDoxV4+FoL8I3OAlz615WDsJ+/s1HZlut0vFyvF3ZYNHU
 yTNDZ9A7a+Wtpa0Zuf3UTB7GDv8UIVZRxV5kMlOAyaGKdRlobFo=
 =DFRT
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmJ+JWoACgkQmmx57+YA
 GNk/6A/+O1NuQR5BNukjFOaBCKdI6IfFB0fwbQK9Eodq2+r6GIhaU4CTNiyhd5jJ
 HJU5p6IZB8Ejzx6iV9P9phXDMKDSWeUUUAgdTEbY0P3xRi23UcNyKE01HgM7XhlT
 wJ6DZZo9axLIEfU0dG8yXJBsPnIpuFQLkY60NYocDlCcthRul105A5wi/Zo/7sJR
 1t0EScIaEs9qI2Q90iVneEeqlVCJ09Yri7KqTGzi1M30+p70AD0D27HGTUHY4oSn
 SbEvaLDQwnQhRQFUcBsWizPLTJTErhXJUx+dpJul+kwEDBYe/xdbl+SEG+t53DMi
 Uf6PxbuFvAQgO/TkEwXxfHgyPBuhvXESARhGmxdmaoFwVMygxPFHZZmmAw1q0S/2
 xTAa0sv+Bh9U6Blls6GKsPzploEHfny2tsSwHswgAH5fnjHvgKKARlMeRWXYas8u
 7yhQsFQ1QxTj2X5ZVWRx0BKfE/CTjyufTYKzDR9DsHkWTZaHhvXgOpESwPafl102
 1HyLbCHSvP4YiY2PSSDsmDDF4uO7EncVpu9e0a7914nPpvmlZVyODk2lOGJ8UoFY
 vYXVEiKTDcCpAUb40a6HghDepEOcz85NL1zPfVB/LhwlKHspf4kPu0mWp1wJBG5d
 alOPh1t/40cTfl8KMRvWBUuD4MkXug+RMRC5imxIdH4cvroACK0=
 =c0vE
 -----END PGP SIGNATURE-----

Merge tag 'visconti-arm-dt-for-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/iwamatsu/linux-visconti into arm/dt

Visconti device tree updates for 5.19

- Update the clock providers for PCIe host controller
- Update the clock providers for ethernet device
- Update the clock providers for SPI
- Update the clock providers for watchdog timer
- Update the clock providers for I2C
- Update the clock providers for UART
- Add clock controller support for TMPV7708

* tag 'visconti-arm-dt-for-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/iwamatsu/linux-visconti:
  arm64: dts: visconti: Update the clock providers for PCIe host controller
  arm64: dts: visconti: Update the clock providers for ethernet device
  arm64: dts: visconti: Update the clock providers for SPI
  arm64: dts: visconti: Update the clock providers for watchdog timer
  arm64: dts: visconti: Update the clock providers for I2C
  arm64: dts: visconti: Update the clock providers for UART
  arm64: dts: visconti: Add clock controller support for TMPV7708

Link: https://lore.kernel.org/r/TYWPR01MB94201E842A2F8E5E9EBF740D92C99@TYWPR01MB9420.jpnprd01.prod.outlook.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-05-13 11:31:21 +02:00
Alexandre Torgue
045d0c3db9
dt-bindings: clock: stm32mp1: adapt example for "st,stm32mp1-rcc-secure"
For "st,stm32mp1-rcc-secure" schema, clocks and clock-names entries are now
required properties.

Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
Acked-by: Rob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20220511092559.4952-1-alexandre.torgue@foss.st.com'
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-05-13 11:30:58 +02:00
Hans Verkuil
f9222f8ca1 media: cec-adap.c: drop activate_cnt, use state info instead
Using an activation counter to decide when the enable or disable the
cec adapter is not the best approach and can lead to race conditions.

Change this to determining the current status of the adapter, and
enable or disable the adapter accordingly.

It now only needs to be called whenever there is a chance that the
state changes, and it can handle enabling/disabling monitoring as
well if needed.

This simplifies the code and it should be a more robust approach as well.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:29:39 +02:00
Hans Verkuil
e3891b3636 media: cec-adap.c: reconfigure if the PA changes during configuration
If the physical address changes (i.e. becomes invalid, then valid again)
while the adapter is still claiming free logical addresses, then trigger
a reconfiguration since any claimed LAs may now be stale.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:29:16 +02:00
Arnd Bergmann
eea502e3c5 Naming and flag corrections.
-----BEGIN PGP SIGNATURE-----
 
 iQFEBAABCAAuFiEE7v+35S2Q1vLNA3Lx86Z5yZzRHYEFAmJ8RDoQHGhlaWtvQHNu
 dGVjaC5kZQAKCRDzpnnJnNEdgQzCB/4mVQKMxQBrzK3yn6x2lwS18cCcAIykGRYs
 BjR7/Jk/Z/2MOoxuXMecVaR7zTznYmJfHMegubyjFWxMN3/mu+XXEV+DT8jIEt73
 0fArsc2o0Xv6TMPUp8ohkALaWNoyXpX/ccQi72CbQ2yKyygsqhpd0WEEdPVDEW6L
 Q0uM3J1Fus+ReqFYIyPHXXPAo9bhLQkxpR3nBzLAo6yfTua/zOW4YqUi6kWVPuFT
 CZRb0Hn7BdLvUktKG0hWK5GUZHzCy9h26KbXzBnbM1nWJuud4jKpQNo3lxBY5fDU
 ruXZLLgW4k/fK7+ovhEu5DY5mD+OAcGgKMvyTkmYhdEwPTwFO9ml
 =cei9
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmJ+JOcACgkQmmx57+YA
 GNkOpxAAlSqeE9GZzCjujvlDV5SV3zq2L1zyprBppgiepKNy1fS0Tj0FGh0+PhzY
 QAlXItwN1iAwzSW29a+DFAh9n1BSVtbKgRzh/m/irMXePLAi9MapCFRftbaLc5ML
 Ytg38zp2apyL0pvUn69F1+5oaWGXhkynRecFDoPEjDTvi10bLdRUMztO/5ioizWx
 YG+vfjNPO1DduI5SmoPhhIm6/lYG305K8AI/x3vZ3vvCCKaZEWXaI2dDZ9JAqXRc
 UTgojJhCgZDAz8ZxiwDaAtUB2ATaN1VtKtoVTPBysFKl8kEiBpc/zYn6MX0zy7gc
 nzRmnNNvMjUJJgWIn695Y5NWp9+4MSTR/7XDcJOTdmHRglDlP8Q+/kDMMuJPyG/x
 2NHD1Du+zXnl7KEY9ibsF09H/wYTXGWoYUoatGT4Eg9Q5I7wLT5CkSTdqnSMNk80
 72oj4aAuTqn5WOi3iMttt306L6y/KBm7AQNnDk1mC1NBqLvNspwKW7VK865Dmpc1
 NTnLq536eOQorQA7ApqeBiwaZcvlU/R+d7yom+KY3+fllAt/CiZ4k/+XLXc3RJaf
 B7rygH3db4bVXQ2tgy90t/puFLLAX8cJPW4fOxYMXvkP/BnHvKWrCep4FHuZpKks
 yRuCDYtOi3NjXxbCGN5uXM5hC/eDZyfl1GJUvoB1SMF0EQAXO84=
 =ZRPe
 -----END PGP SIGNATURE-----

Merge tag 'v5.19-rockchip-dts32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into arm/dt

Naming and flag corrections.

* tag 'v5.19-rockchip-dts32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
  ARM: dts: rockchip: rename pcfg_pull_default node name on rk3036
  ARM: dts: rockchip: use generic node name for dma rk3036/rk322x
  ARM: dts: rockchip: correct interrupt flags on rk3188 boards

Link: https://lore.kernel.org/r/6919636.31r3eYUQgx@phil
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-05-13 11:29:11 +02:00
Hans Verkuil
59267fc34f media: cec-adap.c: fix is_configuring state
If an adapter is trying to claim a free logical address then it is
in the 'is_configuring' state. If during that process the cable is
disconnected (HPD goes low, which in turn invalidates the physical
address), then cec_adap_unconfigure() is called, and that set the
is_configuring boolean to false, even though the thread that's
trying to claim an LA is still running.

Don't touch the is_configuring bool in cec_adap_unconfigure(), it
will eventually be cleared by the thread. By making that change
the cec_config_log_addr() function also had to change: it was
aborting if is_configuring became false (since that is what
cec_adap_unconfigure() did), but that no longer works. Instead
check if the physical address is invalid. That is a much
more appropriate check anyway.

This fixes a bug where the the adapter could be disabled even
though the device was still configuring. This could cause POLL
transmits to time out.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:28:54 +02:00
Arnd Bergmann
835c0d9350 New peripherals supported on rk356x: sfc, usb3, sata and
the video-decoder on rk3328.
 RK3399 received some improvements and nodes for the memory controller.
 Additional peripherals for PineNote, Gru and BananaPi-R2-Pro.
 New boards are the Firefly Station M2, Pine64 SoQuartz SOM and
 Quartz64 model B as well as the Radxa Rock3 model A.
 -----BEGIN PGP SIGNATURE-----
 
 iQFEBAABCAAuFiEE7v+35S2Q1vLNA3Lx86Z5yZzRHYEFAmJ8RpUQHGhlaWtvQHNu
 dGVjaC5kZQAKCRDzpnnJnNEdgQJjB/9PfcoC3u5FzRDuE8w74u0A3UPx+diqHdsR
 QKwqsqngjMNsnCQjwsu8qbbbBevgvELorOVEY+RjuY4uNkxecf9j8lFlItk2UvVf
 2ZZZm/vNP16Gaera5S7GVYiWmisLdbyQ8xw61iJoNbCrsWeLDVxJ2unyG+E7dxa6
 u5bHhsd58PE/BI0Paxf/OIw4oGh2FAbCbMiXNQjwHHu5eGjgy+V6guqkJ6FruhmG
 qlu9DZQz33DGQ7N57ympheqVsih9vm3lA0dfSiOpiyG2CNwZ8k80aW40mEcuJkbA
 yWGUHbMc80Kxi2sWkYDWpagavt6M1bn8pQgCrNrRYWVPhktUvG2c
 =2V+q
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmJ+JMgACgkQmmx57+YA
 GNnq2g//ek80cpzuUCOr6ox1Im/gIdo+Yf8NqbuI481alwWjfS9Nl1wptr/b3nP3
 A3xrHvNrN2T/OFsyvWkHI7ZItk821E5Y8AtawPVuozr8myZ5msiyZ63cXcKkiVvG
 +f8txwBgbvWVqVXtgOZFQs/BfGr+DLA3VHXewwZAdZp0GKzgmXWF5WKJtb0q8KOn
 yQoTGjiN0bDQR9UuX18bVJgibtH+POuQdkScvPfukiXyIpgdY0hlQHt67VTkWfeY
 jH7OgbcG768hipWXK3IKoLkl1ECL6Sycy/aMiSbqHu0Pp/qA9hJdFKHaQ2+sj4vF
 HjaslQRTFsj0Lp0nJaUeDq37Ds1P/ZfAqo+xXeWNjZzvowBIDLB3vOk6AW0aSVw4
 mmhVDULyEE5IunoXORLjXkhvPtP5SLA4SBbANvrSCtk/pn9DvG+YE+GjjrD8loHC
 eujIFeV+THp3JMpM2nmAQxKo2Xz+3s3eEi70XzDfZBNNBO8n0eRHM4oKukUTWOAl
 kA7jHRCnU0TFp+y4VyfocZUarbJiisj0eeeQkzQFQCSJyX8mFYyY9rd+DrJleged
 ab1AoQhwJrNppb7yy0WegQ8LAJi/zbT8wVklgqpyh7DKR7FAZLjEQWcepOFJ8vPm
 FJUmYjCJSqTnjCxFvHNavudxD+DGl/Rc9eSZr9UDUIzFod85MMQ=
 =XPfy
 -----END PGP SIGNATURE-----

Merge tag 'v5.19-rockchip-dts64-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into arm/dt

New peripherals supported on rk356x: sfc, usb3, sata and
the video-decoder on rk3328.
RK3399 received some improvements and nodes for the memory controller.
Additional peripherals for PineNote, Gru and BananaPi-R2-Pro.
New boards are the Firefly Station M2, Pine64 SoQuartz SOM and
Quartz64 model B as well as the Radxa Rock3 model A.

* tag 'v5.19-rockchip-dts64-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip: (32 commits)
  arm64: dts: rockchip: enable otg/drd operation of usb_host0_xhci in rk356x
  arm64: dts: rockchip: rename HDMI ref clock to 'ref' on rk3399
  arm64: dts: rockchip: add dts for Firefly Station M2 rk3566
  arm64: dts: rockchip: add SoQuartz CM4IO dts
  arm64: dts: rockchip: add Pine64 Quartz64-B device tree
  dt-bindings: arm: rockchip: Add Firefly Station M2
  dt-bindings: arm: rockchip: Add Pine64 SoQuartz SoM
  dt-bindings: arm: rockchip: Add Pine64 Quartz64 Model B
  arm64: dts: rockchip: enable usb hub on the radxa rock3 model a
  arm64: dts: rockchip: add usb3 support to the radxa rock3 model a
  arm64: dts: rockchip: add rk356x sfc support
  arm64: dts: rockchip: Add USB and TCPC to rk3566-pinenote
  arm64: dts: rockchip: Add accelerometer to rk3566-pinenote
  arm64: dts: rockchip: add an input enable pinconf to rk3399
  arm64: dts: rockchip: Add vdec support for RK3328
  arm64: dts: rockchip: Rename vdec_mmu node for RK3328
  arm64: dts: rockchip: Enable dmc and dfi nodes on gru
  arm64: dts: rockchip: Add dfi and dmc nodes to rk3399
  arm64: dts: rockchip: add clocks property to cru nodes rk3399
  arm64: dts: rockchip: use generic node name for pmucru on rk3399
  ...

Link: https://lore.kernel.org/r/7748558.DvuYhMxLoT@phil
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-05-13 11:28:40 +02:00
Hans Verkuil
184c387db0 media: cec-adap.c: stop trying LAs on CEC_TX_STATUS_TIMEOUT
If, while trying to claim a free logical address, a POLL message
times out, then abort this process. A CEC_TX_STATUS_TIMEOUT
should be handled the same as a CEC_TX_STATUS_ABORTED.

This avoids a situation where transmits time out due to a
driver or hardware bug and it takes ages before the attempt
to find available free logical addresses finishes.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:28:35 +02:00
Arnd Bergmann
18176b9d82
Revert "ARM: dts: BCM5301X: Fix DTC warning for NAND node"
This reverts commit 90103611d5, which caused a new DTC warning

arch/arm/boot/dts/bcm953012hr.dts:57.3-33: Warning (reg_format): /nand-controller@18028000/nand@0/partition@0:reg: property has invalid length (8 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm/boot/dts/bcm953012hr.dts:62.3-33: Warning (reg_format): /nand-controller@18028000/nand@0/partition@200000:reg: property has invalid length (8 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm/boot/dts/bcm953012hr.dts:66.3-33: Warning (reg_format): /nand-controller@18028000/nand@0/partition@600000:reg: property has invalid length (8 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm/boot/dts/bcm953012hr.dts:70.3-33: Warning (reg_format): /nand-controller@18028000/nand@0/partition@1000000:reg: property has invalid length (8 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm/boot/dts/bcm953012hr.dtb: Warning (pci_device_reg): Failed prerequisite 'reg_format'
arch/arm/boot/dts/bcm953012hr.dtb: Warning (pci_device_bus_num): Failed prerequisite 'reg_format'
arch/arm/boot/dts/bcm953012hr.dtb: Warning (i2c_bus_reg): Failed prerequisite 'reg_format'
arch/arm/boot/dts/bcm953012hr.dtb: Warning (spi_bus_reg): Failed prerequisite 'reg_format'

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-05-13 11:28:14 +02:00
Hans Verkuil
498946cf6b media: cec-adap.c: don't unconfigure if already unconfigured
The __cec_s_log_addrs() function can configure or unconfigure the
adapter. The ioctl handler in cec-api.c will prevent it from being
called to configure the adapter if it was already configured (or in
the process of configuring). But it can still be called to unconfigure
an already unconfigured adapter, and it didn't check for that.

This can cause cec_activate_cnt_dec() to be called too often, causing
a WARN_ON.

Instead first check if adap->log_addrs.num_log_addrs == 0 and return
since in that case the adapter is already unconfigured.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:28:06 +02:00
Hans Verkuil
5f4eb16750 media: cec-pin.c: don't zero work_pin_num_events in adap_enable
It's OK to keep the pending pin events when disabling or
enabling the 'adapter'. Zeroing this can cause a race condition
if this happens when the pin kthread is handling a pin event
and calls atomic_dec later, causing work_pin_num_events to become
negative.

Just leave pending events in the queue, they'll be read eventually.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:27:47 +02:00
Hans Verkuil
60965c6a19 media: cec-pin.c: disabling the adapter cannot call kthread_stop
When the adap_enable callback is called the adap->lock is held.
When disabling the adapter it attempts to stop the kthread that
deals with receiving and transmitting messages. However, kthread_stop
waits for the thread to stop, so all that time adap->lock is held.

Unfortunately, the kernel thread itself can call functions that take
that same lock, so a deadlock can occur.

Change the logic to keep the kernel thread running and instead when
disabling the adapter, just set the pin to high, go to idle and then
to state OFF and disable the interrupt. Only stop the kernel thread
when the adapter is deleted.

This way disabling the adapter will not wait for anything and the
deadlock is avoided.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:27:19 +02:00
Vladis Dronov
349d03ffd5 crypto: s390 - add crypto library interface for ChaCha20
Implement a crypto library interface for the s390-native ChaCha20 cipher
algorithm. This allows us to stop to select CRYPTO_CHACHA20 and instead
select CRYPTO_ARCH_HAVE_LIB_CHACHA. This allows BIG_KEYS=y not to build
a whole ChaCha20 crypto infrastructure as a built-in, but build a smaller
CRYPTO_LIB_CHACHA instead.

Make CRYPTO_CHACHA_S390 config entry to look like similar ones on other
architectures. Remove CRYPTO_ALGAPI select as anyway it is selected by
CRYPTO_SKCIPHER.

Add a new test module and a test script for ChaCha20 cipher and its
interfaces. Here are test results on an idle z15 machine:

Data | Generic crypto TFM |  s390 crypto TFM |    s390 lib
size |      enc      dec  |     enc     dec  |     enc     dec
-----+--------------------+------------------+----------------
512b |   1545ns   1295ns  |   604ns   446ns  |   430ns  407ns
4k   |   9536ns   9463ns  |  2329ns  2174ns  |  2170ns  2154ns
64k  |  149.6us  149.3us  |  34.4us  34.5us  |  33.9us  33.1us
6M   |  23.61ms  23.11ms  |  4223us  4160us  |  3951us  4008us
60M  |  143.9ms  143.9ms  |  33.5ms  33.2ms  |  32.2ms  32.1ms

Signed-off-by: Vladis Dronov <vdronov@redhat.com>
Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:49 +08:00
jianchunfu
6ae7a8b193 crypto: talitos - Uniform coding style with defined variable
Use the defined variable "desc" to uniform coding style.

Signed-off-by: jianchunfu <jianchunfu@cmss.chinamobile.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:49 +08:00
Minghao Chi
e0c77eb37e crypto: octeontx2 - simplify the return expression of otx2_cpt_aead_cbc_aes_sha_setkey()
Simplify the return expression.

Reported-by: Zeal Robot <zealci@zte.com.cn>
Signed-off-by: Minghao Chi <chi.minghao@zte.com.cn>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:48 +08:00
Sebastian Andrzej Siewior
91e8bcd7b4 crypto: cryptd - Protect per-CPU resource by disabling BH.
The access to cryptd_queue::cpu_queue is synchronized by disabling
preemption in cryptd_enqueue_request() and disabling BH in
cryptd_queue_worker(). This implies that access is allowed from BH.

If cryptd_enqueue_request() is invoked from preemptible context _and_
soft interrupt then this can lead to list corruption since
cryptd_enqueue_request() is not protected against access from
soft interrupt.

Replace get_cpu() in cryptd_enqueue_request() with local_bh_disable()
to ensure BH is always disabled.
Remove preempt_disable() from cryptd_queue_worker() since it is not
needed because local_bh_disable() ensures synchronisation.

Fixes: 254eff7714 ("crypto: cryptd - Per-CPU thread implementation...")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:48 +08:00
Corentin Labbe
42a01af3f1 crypto: sun8i-ce - do not fallback if cryptlen is less than sg length
The sg length could be more than remaining data on it.
So check the length requirement against the minimum between those two
values.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:48 +08:00
Corentin Labbe
aff388f787 crypto: sun8i-ce - rework debugging
The "Fallback for xxx" message is annoying, remove it and store the
information in the debugfs.
Let's add more precise fallback stats and display it better.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:48 +08:00
Corentin Labbe
6b8309faf0 crypto: sun8i-ce - use sg_nents_for_len
When testing with some large SG list, the sun8i-ce drivers always
fallback even if it can handle it.
So use sg_nents_for_len() which permits to see less SGs than needed.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:20 +08:00
Corentin Labbe
8a1714ad1a crypto: sun8i-ce - Add function for handling hash padding
Move all padding work to a dedicated function.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:20 +08:00
Corentin Labbe
2e5545acf6 crypto: sun8i-ss - do not fallback if cryptlen is less than sg length
The sg length could be more than remaining data on it.
So check the length requirement against the minimum between those two
values.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:20 +08:00
Corentin Labbe
801b7d572c crypto: sun8i-ss - add hmac(sha1)
Even if sun8i-ss does not handle hmac(sha1) directly, we can provide one
which use the already supported acceleration of sha1.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:19 +08:00
Corentin Labbe
e76ee4db9e crypto: sun8i-ss - Add function for handling hash padding
Move all padding work to a dedicated function.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:19 +08:00
Corentin Labbe
f95f61d0b2 crypto: sun8i-ss - rework debugging
The "Fallback for xxx" message is annoying, remove it and store the
information in the debugfs.
In the same time, reports more fallback statistics.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:19 +08:00
Corentin Labbe
c35e523a8b crypto: sun8i-ss - handle requests if last block is not modulo 64
The current sun8i-ss handle only requests with all SG length being
modulo 64.
But the last SG could be always handled by copying it on the pad buffer.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:19 +08:00
Corentin Labbe
db0c62bcd4 crypto: sun8i-ss - do not zeroize all pad
Instead of memset all pad buffer, it is faster to only put 0 where
needed.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:19 +08:00
Corentin Labbe
8eec4563f1 crypto: sun8i-ss - do not allocate memory when handling hash requests
Instead of allocate memory on each requests, it is easier to
pre-allocate buffers.
This made error path easier.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:18 +08:00
Corentin Labbe
4d867bebdc crypto: sun8i-ss - use sg_nents_for_len
When testing with some large SG list, the sun8i-ss drivers always
fallback even if it can handle it.
So use sg_nents_for_len() which permits to see less SGs than needed.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:18 +08:00
Corentin Labbe
d86e3f37a6 crypto: sun8i-ss - test error before assigning
The first thing we should do after dma_map_single() is to test the
result.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:18 +08:00
Corentin Labbe
46e2fcbcbe crypto: sun8i-ss - remove redundant test
Some fallback tests were redundant with what sun8i_ss_hash_need_fallback() already do.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:18 +08:00
Corentin Labbe
c149e4763d crypto: sun8i-ss - handle zero sized sg
sun8i-ss does not handle well the possible zero sized sg.

Fixes: d9b45418a9 ("crypto: sun8i-ss - support hash algorithms")
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:18 +08:00
Corentin Labbe
359e893e8a crypto: sun8i-ss - rework handling of IV
sun8i-ss fail handling IVs when doing decryption of multiple SGs in-place.
It should backup the last block of each SG source for using it later as
IVs.
In the same time remove allocation on requests path for storing all
IVs.

Fixes: f08fcced6d ("crypto: allwinner - Add sun8i-ss cryptographic offloader")
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:18 +08:00
Corentin Labbe
22d03a0aad crypto: sun4i-ss - do not allocate backup IV on requests
Instead of allocate memory on each requests, it is easier to
pre-allocate buffer for backup IV.
This made error path easier.
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:17 +08:00
Corentin Labbe
22f7c2f8cf crypto: sun8i-ce - do not allocate memory when handling requests
Instead of allocate memory on each requests, it is easier to
pre-allocate buffer for IV.
This made error path easier.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:17 +08:00
Corentin Labbe
282ee0716f crypto: sun8i-ce - Fix minor style issue
This patch remove a double blank line.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:24:17 +08:00
Tetsuo Handa
db264d4c66 media: imon: reorganize serialization
Since usb_register_dev() from imon_init_display() from imon_probe() holds
minor_rwsem while display_open() which holds driver_lock and ictx->lock is
called with minor_rwsem held from usb_open(), holding driver_lock or
ictx->lock when calling usb_register_dev() causes circular locking
dependency problem.

Since usb_deregister_dev() from imon_disconnect() holds minor_rwsem while
display_open() which holds driver_lock is called with minor_rwsem held,
holding driver_lock when calling usb_deregister_dev() also causes circular
locking dependency problem.

Sean Young explained that the problem is there are imon devices which have
two usb interfaces, even though it is one device. The probe and disconnect
function of both usb interfaces can run concurrently.

Alan Stern responded that the driver and USB cores guarantee that when an
interface is probed, both the interface and its USB device are locked.
Ditto for when the disconnect callback gets run. So concurrent probing/
disconnection of multiple interfaces on the same device is not possible.

Therefore, we don't need locks for handling race between imon_probe() and
imon_disconnect(). But we still need to handle race between display_open()
/vfd_write()/lcd_write()/display_close() and imon_disconnect(), for
disconnect event can happen while file descriptors are in use.

Since "struct file"->private_data is set by display_open(), vfd_write()/
lcd_write()/display_close() can assume that "struct file"->private_data
is not NULL even after usb_set_intfdata(interface, NULL) was called.

Replace insufficiently held driver_lock with refcount_t based management.
Add a boolean flag for recording whether imon_disconnect() was already
called. Use RCU for accessing this boolean flag and refcount_t.

Since the boolean flag for imon_disconnect() is shared, disconnect event
on either intf0 or intf1 affects both interfaces. But I assume that this
change does not matter, for usually disconnect event would not happen
while interfaces are in use.

Link: https://syzkaller.appspot.com/bug?extid=c558267ad910fc494497

Reported-by: syzbot <syzbot+c558267ad910fc494497@syzkaller.appspotmail.com>
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Tested-by: syzbot <syzbot+c558267ad910fc494497@syzkaller.appspotmail.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:23:38 +02:00
Ondrej Mosnacek
16287397ec crypto: qcom-rng - fix infinite loop on requests not multiple of WORD_SZ
The commit referenced in the Fixes tag removed the 'break' from the else
branch in qcom_rng_read(), causing an infinite loop whenever 'max' is
not a multiple of WORD_SZ. This can be reproduced e.g. by running:

    kcapi-rng -b 67 >/dev/null

There are many ways to fix this without adding back the 'break', but
they all seem more awkward than simply adding it back, so do just that.

Tested on a machine with Qualcomm Amberwing processor.

Fixes: a680b1832c ("crypto: qcom-rng - ensure buffer for generate is completely filled")
Cc: stable@vger.kernel.org
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
Reviewed-by: Brian Masney <bmasney@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-05-13 17:13:38 +08:00
Oliver Neukum
af2aa3c4e5 media: imon: drop references only after device is no longer used
The point of using get/put_device() is to keep references
for as long as the device may be in use. That means dropping
them must be the penultimate action right before freeing the memory.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-05-13 11:02:23 +02:00