Re: [PATCH 1/1] tty: serial: uartlite: allow 64 bit address
From: Lizhi Hou
Date: Tue Nov 23 2021 - 15:12:17 EST
On 11/23/21 10:59 AM, Greg KH wrote:
On Tue, Nov 23, 2021 at 10:45:06AM -0800, Lizhi Hou wrote:
Fix the uartlite probe failure when it is mapped to address above 4G.
Fix it how?
Does this detail comment look ok to you?
The base address of uartlite registers could be 64 bit address which is
from device resource. When ulite_probe() calls ulite_assign(), this 64
bit address is casted to 32-bit. The fix is to replace "u32" type with
"phys_addr_t" type for the base address in ulite_assign() argument list.
Signed-off-by: Lizhi Hou <lizhi.hou@xxxxxxxxxx>
What commit caused this problem? What commit does this fix? Should it
go to stable kernels?
I searched the history. This problem was introduced by
https://github.com/torvalds/linux/commit/8fa7b6100693e0b648ffd34564f6f41226502a19
And yes, I agree this should go to stable kernels. I will add
stable@xxxxxxxxxxxxxxx to cc list.
---
drivers/tty/serial/uartlite.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c
index d3d9566e5dbd..e1fa52d31474 100644
--- a/drivers/tty/serial/uartlite.c
+++ b/drivers/tty/serial/uartlite.c
@@ -626,7 +626,7 @@ static struct uart_driver ulite_uart_driver = {
*
* Returns: 0 on success, <0 otherwise
*/
-static int ulite_assign(struct device *dev, int id, u32 base, int irq,
+static int ulite_assign(struct device *dev, int id, phys_addr_t base, int irq,
struct uartlite_data *pdata)
So you changed the variable type which does what exactly here?
ulite_probe()
-> ulite_assign(&pdev->dev, id, res->start, irq, pdata)
^^^^^^ could be
64-bit address. Thus "u32 base" may lose the high 32-bit.
Hopefully this makes sense to you. And I can re-submit an updated patch.
Thanks,
Lizhi
thanks,
greg k-h