* [PATCH v4 1/7] video: xilinxfb: Fix OF probing on little-endian systems
2013-06-03 10:13 [PATCH v4 0/7] xilinxfb changes Michal Simek
@ 2013-06-03 10:13 ` Michal Simek
2013-06-03 10:13 ` [PATCH v4 2/7] video: xilinxfb: Do not name out_be32 in function name Michal Simek
` (6 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Michal Simek @ 2013-06-03 10:13 UTC (permalink / raw)
To: linux-kernel
Cc: Michal Simek, Michal Simek, Arnd Bergmann, Timur Tabi,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen, Grant Likely,
Rob Herring, linux-fbdev, devicetree-discuss
[-- Attachment #1: Type: text/plain, Size: 1353 bytes --]
From: Michal Simek <monstr@monstr.eu>
DTB is always big-endian that's why it is necessary
to properly convert value (*p).
It is automatically done in of_property_read_u32().
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Changes in v4: None
Changes in v3:
- fix commit message
Changes in v2:
- use of_property_read_u32 helper function
drivers/video/xilinxfb.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index af0b4fd..aecd15d 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -406,8 +406,7 @@ static int xilinxfb_release(struct device *dev)
static int xilinxfb_of_probe(struct platform_device *op)
{
const u32 *prop;
- u32 *p;
- u32 tft_access;
+ u32 tft_access = 0;
struct xilinxfb_platform_data pdata;
struct resource res;
int size, rc;
@@ -427,8 +426,8 @@ static int xilinxfb_of_probe(struct platform_device *op)
* To check whether the core is connected directly to DCR or PLB
* interface and initialize the tft_access accordingly.
*/
- p = (u32 *)of_get_property(op->dev.of_node, "xlnx,dcr-splb-slave-if", NULL);
- tft_access = p ? *p : 0;
+ of_property_read_u32(op->dev.of_node, "xlnx,dcr-splb-slave-if",
+ &tft_access);
/*
* Fill the resource structure if its direct PLB interface
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 2/7] video: xilinxfb: Do not name out_be32 in function name
2013-06-03 10:13 [PATCH v4 0/7] xilinxfb changes Michal Simek
2013-06-03 10:13 ` [PATCH v4 1/7] video: xilinxfb: Fix OF probing on little-endian systems Michal Simek
@ 2013-06-03 10:13 ` Michal Simek
2013-06-03 10:13 ` [PATCH v4 3/7] video: xilinxfb: Rename PLB_ACCESS_FLAG to BUS_ACCESS_FLAG Michal Simek
` (5 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Michal Simek @ 2013-06-03 10:13 UTC (permalink / raw)
To: linux-kernel
Cc: Michal Simek, Michal Simek, Arnd Bergmann, Timur Tabi,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 3228 bytes --]
out_be32 IO function is not supported by ARM.
It is only available for PPC and Microblaze.
Because this driver can be used on ARM let's
remove out_be32 from function name.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Changes in v4: None
Changes in v3:
- Remove out_be IO name from function name
- Change patch subject from "Do not use out_be32 IO function"
to "Do not name out_be32 in function name"
Changes in v2: None
drivers/video/xilinxfb.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index aecd15d..c9b442b 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -57,7 +57,7 @@
* In case of direct PLB access the second control register will be at
* an offset of 4 as compared to the DCR access where the offset is 1
* i.e. REG_CTRL. So this is taken care in the function
- * xilinx_fb_out_be32 where it left shifts the offset 2 times in case of
+ * xilinx_fb_out32 where it left shifts the offset 2 times in case of
* direct PLB access.
*/
#define NUM_REGS 2
@@ -150,7 +150,7 @@ struct xilinxfb_drvdata {
* To perform the read/write on the registers we need to check on
* which bus its connected and call the appropriate write API.
*/
-static void xilinx_fb_out_be32(struct xilinxfb_drvdata *drvdata, u32 offset,
+static void xilinx_fb_out32(struct xilinxfb_drvdata *drvdata, u32 offset,
u32 val)
{
if (drvdata->flags & PLB_ACCESS_FLAG)
@@ -197,7 +197,7 @@ xilinx_fb_blank(int blank_mode, struct fb_info *fbi)
switch (blank_mode) {
case FB_BLANK_UNBLANK:
/* turn on panel */
- xilinx_fb_out_be32(drvdata, REG_CTRL, drvdata->reg_ctrl_default);
+ xilinx_fb_out32(drvdata, REG_CTRL, drvdata->reg_ctrl_default);
break;
case FB_BLANK_NORMAL:
@@ -205,7 +205,7 @@ xilinx_fb_blank(int blank_mode, struct fb_info *fbi)
case FB_BLANK_HSYNC_SUSPEND:
case FB_BLANK_POWERDOWN:
/* turn off panel */
- xilinx_fb_out_be32(drvdata, REG_CTRL, 0);
+ xilinx_fb_out32(drvdata, REG_CTRL, 0);
default:
break;
@@ -280,13 +280,13 @@ static int xilinxfb_assign(struct device *dev,
memset_io((void __iomem *)drvdata->fb_virt, 0, fbsize);
/* Tell the hardware where the frame buffer is */
- xilinx_fb_out_be32(drvdata, REG_FB_ADDR, drvdata->fb_phys);
+ xilinx_fb_out32(drvdata, REG_FB_ADDR, drvdata->fb_phys);
/* Turn on the display */
drvdata->reg_ctrl_default = REG_CTRL_ENABLE;
if (pdata->rotate_screen)
drvdata->reg_ctrl_default |= REG_CTRL_ROTATE;
- xilinx_fb_out_be32(drvdata, REG_CTRL,
+ xilinx_fb_out32(drvdata, REG_CTRL,
drvdata->reg_ctrl_default);
/* Fill struct fb_info */
@@ -345,7 +345,7 @@ err_cmap:
iounmap(drvdata->fb_virt);
/* Turn off the display */
- xilinx_fb_out_be32(drvdata, REG_CTRL, 0);
+ xilinx_fb_out32(drvdata, REG_CTRL, 0);
err_fbmem:
if (drvdata->flags & PLB_ACCESS_FLAG)
@@ -381,7 +381,7 @@ static int xilinxfb_release(struct device *dev)
iounmap(drvdata->fb_virt);
/* Turn off the display */
- xilinx_fb_out_be32(drvdata, REG_CTRL, 0);
+ xilinx_fb_out32(drvdata, REG_CTRL, 0);
/* Release the resources, as allocated based on interface */
if (drvdata->flags & PLB_ACCESS_FLAG) {
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 3/7] video: xilinxfb: Rename PLB_ACCESS_FLAG to BUS_ACCESS_FLAG
2013-06-03 10:13 [PATCH v4 0/7] xilinxfb changes Michal Simek
2013-06-03 10:13 ` [PATCH v4 1/7] video: xilinxfb: Fix OF probing on little-endian systems Michal Simek
2013-06-03 10:13 ` [PATCH v4 2/7] video: xilinxfb: Do not name out_be32 in function name Michal Simek
@ 2013-06-03 10:13 ` Michal Simek
2013-06-03 10:13 ` [PATCH v4 4/7] video: xilinxfb: Use drvdata->regs_phys instead of physaddr Michal Simek
` (4 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Michal Simek @ 2013-06-03 10:13 UTC (permalink / raw)
To: linux-kernel
Cc: Michal Simek, Michal Simek, Arnd Bergmann, Timur Tabi,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 4821 bytes --]
Using only PLB name is wrong for a long time because
the same access functions are also used for AXI.
s/PLB/BUS/g
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Changes in v4: None
Changes in v3:
- New patch in this patchset based on discussions
Changes in v2: None
drivers/video/xilinxfb.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index c9b442b..d94c992 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -44,7 +44,7 @@
/*
- * Xilinx calls it "PLB TFT LCD Controller" though it can also be used for
+ * Xilinx calls it "TFT LCD Controller" though it can also be used for
* the VGA port on the Xilinx ML40x board. This is a hardware display
* controller for a 640x480 resolution TFT or VGA screen.
*
@@ -54,11 +54,11 @@
* don't start thinking about scrolling). The second allows the LCD to
* be turned on or off as well as rotated 180 degrees.
*
- * In case of direct PLB access the second control register will be at
+ * In case of direct BUS access the second control register will be at
* an offset of 4 as compared to the DCR access where the offset is 1
* i.e. REG_CTRL. So this is taken care in the function
* xilinx_fb_out32 where it left shifts the offset 2 times in case of
- * direct PLB access.
+ * direct BUS access.
*/
#define NUM_REGS 2
#define REG_FB_ADDR 0
@@ -116,7 +116,7 @@ static struct fb_var_screeninfo xilinx_fb_var = {
};
-#define PLB_ACCESS_FLAG 0x1 /* 1 = PLB, 0 = DCR */
+#define BUS_ACCESS_FLAG 0x1 /* 1 = BUS, 0 = DCR */
struct xilinxfb_drvdata {
@@ -146,14 +146,14 @@ struct xilinxfb_drvdata {
container_of(_info, struct xilinxfb_drvdata, info)
/*
- * The XPS TFT Controller can be accessed through PLB or DCR interface.
+ * The XPS TFT Controller can be accessed through BUS or DCR interface.
* To perform the read/write on the registers we need to check on
* which bus its connected and call the appropriate write API.
*/
static void xilinx_fb_out32(struct xilinxfb_drvdata *drvdata, u32 offset,
u32 val)
{
- if (drvdata->flags & PLB_ACCESS_FLAG)
+ if (drvdata->flags & BUS_ACCESS_FLAG)
out_be32(drvdata->regs + (offset << 2), val);
#ifdef CONFIG_PPC_DCR
else
@@ -235,10 +235,10 @@ static int xilinxfb_assign(struct device *dev,
int rc;
int fbsize = pdata->xvirt * pdata->yvirt * BYTES_PER_PIXEL;
- if (drvdata->flags & PLB_ACCESS_FLAG) {
+ if (drvdata->flags & BUS_ACCESS_FLAG) {
/*
* Map the control registers in if the controller
- * is on direct PLB interface.
+ * is on direct BUS interface.
*/
if (!request_mem_region(physaddr, 8, DRIVER_NAME)) {
dev_err(dev, "Couldn't lock memory region at 0x%08lX\n",
@@ -270,7 +270,7 @@ static int xilinxfb_assign(struct device *dev,
if (!drvdata->fb_virt) {
dev_err(dev, "Could not allocate frame buffer memory\n");
rc = -ENOMEM;
- if (drvdata->flags & PLB_ACCESS_FLAG)
+ if (drvdata->flags & BUS_ACCESS_FLAG)
goto err_fbmem;
else
goto err_region;
@@ -323,7 +323,7 @@ static int xilinxfb_assign(struct device *dev,
goto err_regfb;
}
- if (drvdata->flags & PLB_ACCESS_FLAG) {
+ if (drvdata->flags & BUS_ACCESS_FLAG) {
/* Put a banner in the log (for DEBUG) */
dev_dbg(dev, "regs: phys=%lx, virt=%p\n", physaddr,
drvdata->regs);
@@ -348,11 +348,11 @@ err_cmap:
xilinx_fb_out32(drvdata, REG_CTRL, 0);
err_fbmem:
- if (drvdata->flags & PLB_ACCESS_FLAG)
+ if (drvdata->flags & BUS_ACCESS_FLAG)
iounmap(drvdata->regs);
err_map:
- if (drvdata->flags & PLB_ACCESS_FLAG)
+ if (drvdata->flags & BUS_ACCESS_FLAG)
release_mem_region(physaddr, 8);
err_region:
@@ -384,7 +384,7 @@ static int xilinxfb_release(struct device *dev)
xilinx_fb_out32(drvdata, REG_CTRL, 0);
/* Release the resources, as allocated based on interface */
- if (drvdata->flags & PLB_ACCESS_FLAG) {
+ if (drvdata->flags & BUS_ACCESS_FLAG) {
iounmap(drvdata->regs);
release_mem_region(drvdata->regs_phys, 8);
}
@@ -423,18 +423,18 @@ static int xilinxfb_of_probe(struct platform_device *op)
}
/*
- * To check whether the core is connected directly to DCR or PLB
+ * To check whether the core is connected directly to DCR or BUS
* interface and initialize the tft_access accordingly.
*/
of_property_read_u32(op->dev.of_node, "xlnx,dcr-splb-slave-if",
&tft_access);
/*
- * Fill the resource structure if its direct PLB interface
+ * Fill the resource structure if its direct BUS interface
* otherwise fill the dcr_host structure.
*/
if (tft_access) {
- drvdata->flags |= PLB_ACCESS_FLAG;
+ drvdata->flags |= BUS_ACCESS_FLAG;
rc = of_address_to_resource(op->dev.of_node, 0, &res);
if (rc) {
dev_err(&op->dev, "invalid address\n");
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 4/7] video: xilinxfb: Use drvdata->regs_phys instead of physaddr
2013-06-03 10:13 [PATCH v4 0/7] xilinxfb changes Michal Simek
` (2 preceding siblings ...)
2013-06-03 10:13 ` [PATCH v4 3/7] video: xilinxfb: Rename PLB_ACCESS_FLAG to BUS_ACCESS_FLAG Michal Simek
@ 2013-06-03 10:13 ` Michal Simek
2013-06-03 10:13 ` [PATCH v4 5/7] video: xilinxfb: Group bus initialization Michal Simek
` (3 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Michal Simek @ 2013-06-03 10:13 UTC (permalink / raw)
To: linux-kernel
Cc: Michal Simek, Michal Simek, Arnd Bergmann, Timur Tabi,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 1003 bytes --]
physaddr will be remove in the next patch.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Changes in v4: None
Changes in v3:
- New patch in this patchset based on discussions
Changes in v2: None
drivers/video/xilinxfb.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index d94c992..1b55f18 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -325,7 +325,7 @@ static int xilinxfb_assign(struct device *dev,
if (drvdata->flags & BUS_ACCESS_FLAG) {
/* Put a banner in the log (for DEBUG) */
- dev_dbg(dev, "regs: phys=%lx, virt=%p\n", physaddr,
+ dev_dbg(dev, "regs: phys=%x, virt=%p\n", drvdata->regs_phys,
drvdata->regs);
}
/* Put a banner in the log (for DEBUG) */
@@ -353,7 +353,7 @@ err_fbmem:
err_map:
if (drvdata->flags & BUS_ACCESS_FLAG)
- release_mem_region(physaddr, 8);
+ release_mem_region(drvdata->regs_phys, 8);
err_region:
kfree(drvdata);
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 5/7] video: xilinxfb: Group bus initialization
2013-06-03 10:13 [PATCH v4 0/7] xilinxfb changes Michal Simek
` (3 preceding siblings ...)
2013-06-03 10:13 ` [PATCH v4 4/7] video: xilinxfb: Use drvdata->regs_phys instead of physaddr Michal Simek
@ 2013-06-03 10:13 ` Michal Simek
2013-06-03 10:13 ` [PATCH v4 6/7] video: xilinxfb: Add support for little endian accesses Michal Simek
` (2 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Michal Simek @ 2013-06-03 10:13 UTC (permalink / raw)
To: linux-kernel
Cc: Michal Simek, Michal Simek, Arnd Bergmann, Timur Tabi,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 3817 bytes --]
Move of_address_to_resource() to xilinxfb_assign()
which simplify driver probing.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Changes in v4: None
Changes in v3:
- New patch in this patchset
Changes in v2: None
drivers/video/xilinxfb.c | 56 +++++++++++++-----------------------------------
1 file changed, 15 insertions(+), 41 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 1b55f18..bd3b85d 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -227,33 +227,23 @@ static struct fb_ops xilinxfb_ops =
* Bus independent setup/teardown
*/
-static int xilinxfb_assign(struct device *dev,
+static int xilinxfb_assign(struct platform_device *pdev,
struct xilinxfb_drvdata *drvdata,
- unsigned long physaddr,
struct xilinxfb_platform_data *pdata)
{
int rc;
+ struct device *dev = &pdev->dev;
int fbsize = pdata->xvirt * pdata->yvirt * BYTES_PER_PIXEL;
if (drvdata->flags & BUS_ACCESS_FLAG) {
- /*
- * Map the control registers in if the controller
- * is on direct BUS interface.
- */
- if (!request_mem_region(physaddr, 8, DRIVER_NAME)) {
- dev_err(dev, "Couldn't lock memory region at 0x%08lX\n",
- physaddr);
- rc = -ENODEV;
- goto err_region;
- }
+ struct resource *res;
- drvdata->regs_phys = physaddr;
- drvdata->regs = ioremap(physaddr, 8);
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ drvdata->regs_phys = res->start;
+ drvdata->regs = devm_request_and_ioremap(&pdev->dev, res);
if (!drvdata->regs) {
- dev_err(dev, "Couldn't lock memory region at 0x%08lX\n",
- physaddr);
- rc = -ENODEV;
- goto err_map;
+ rc = -EADDRNOTAVAIL;
+ goto err_region;
}
}
@@ -349,11 +339,7 @@ err_cmap:
err_fbmem:
if (drvdata->flags & BUS_ACCESS_FLAG)
- iounmap(drvdata->regs);
-
-err_map:
- if (drvdata->flags & BUS_ACCESS_FLAG)
- release_mem_region(drvdata->regs_phys, 8);
+ devm_iounmap(dev, drvdata->regs);
err_region:
kfree(drvdata);
@@ -384,10 +370,8 @@ static int xilinxfb_release(struct device *dev)
xilinx_fb_out32(drvdata, REG_CTRL, 0);
/* Release the resources, as allocated based on interface */
- if (drvdata->flags & BUS_ACCESS_FLAG) {
- iounmap(drvdata->regs);
- release_mem_region(drvdata->regs_phys, 8);
- }
+ if (drvdata->flags & BUS_ACCESS_FLAG)
+ devm_iounmap(dev, drvdata->regs);
#ifdef CONFIG_PPC_DCR
else
dcr_unmap(drvdata->dcr_host, drvdata->dcr_len);
@@ -408,8 +392,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
const u32 *prop;
u32 tft_access = 0;
struct xilinxfb_platform_data pdata;
- struct resource res;
- int size, rc;
+ int size;
struct xilinxfb_drvdata *drvdata;
/* Copy with the default pdata (not a ptr reference!) */
@@ -435,22 +418,17 @@ static int xilinxfb_of_probe(struct platform_device *op)
*/
if (tft_access) {
drvdata->flags |= BUS_ACCESS_FLAG;
- rc = of_address_to_resource(op->dev.of_node, 0, &res);
- if (rc) {
- dev_err(&op->dev, "invalid address\n");
- goto err;
- }
}
#ifdef CONFIG_PPC_DCR
else {
int start;
- res.start = 0;
start = dcr_resource_start(op->dev.of_node, 0);
drvdata->dcr_len = dcr_resource_len(op->dev.of_node, 0);
drvdata->dcr_host = dcr_map(op->dev.of_node, start, drvdata->dcr_len);
if (!DCR_MAP_OK(drvdata->dcr_host)) {
dev_err(&op->dev, "invalid DCR address\n");
- goto err;
+ kfree(drvdata);
+ return -ENODEV;
}
}
#endif
@@ -477,11 +455,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
pdata.rotate_screen = 1;
dev_set_drvdata(&op->dev, drvdata);
- return xilinxfb_assign(&op->dev, drvdata, res.start, &pdata);
-
- err:
- kfree(drvdata);
- return -ENODEV;
+ return xilinxfb_assign(op, drvdata, &pdata);
}
static int xilinxfb_of_remove(struct platform_device *op)
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 6/7] video: xilinxfb: Add support for little endian accesses
2013-06-03 10:13 [PATCH v4 0/7] xilinxfb changes Michal Simek
` (4 preceding siblings ...)
2013-06-03 10:13 ` [PATCH v4 5/7] video: xilinxfb: Group bus initialization Michal Simek
@ 2013-06-03 10:13 ` Michal Simek
2013-06-03 10:13 ` [PATCH v4 7/7] video: xilinxfb: Use driver for Xilinx ARM Zynq Michal Simek
[not found] ` <cover.1370254386.git.michal.simek-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>
7 siblings, 0 replies; 16+ messages in thread
From: Michal Simek @ 2013-06-03 10:13 UTC (permalink / raw)
To: linux-kernel
Cc: Michal Simek, Michal Simek, Arnd Bergmann, Timur Tabi,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 2359 bytes --]
Dynamically detect endianess on IP and use
ioread/iowrite functions instead of powerpc and microblaze
specific out_be32.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
---
Changes in v4:
- Acked by Arnd
Changes in v3:
- New patch in this patchset based on discussions
Changes in v2: None
drivers/video/xilinxfb.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index bd3b85d..f3d4a69 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -117,6 +117,7 @@ static struct fb_var_screeninfo xilinx_fb_var = {
#define BUS_ACCESS_FLAG 0x1 /* 1 = BUS, 0 = DCR */
+#define LITTLE_ENDIAN_ACCESS 0x2 /* LITTLE ENDIAN IO functions */
struct xilinxfb_drvdata {
@@ -153,14 +154,33 @@ struct xilinxfb_drvdata {
static void xilinx_fb_out32(struct xilinxfb_drvdata *drvdata, u32 offset,
u32 val)
{
- if (drvdata->flags & BUS_ACCESS_FLAG)
- out_be32(drvdata->regs + (offset << 2), val);
+ if (drvdata->flags & BUS_ACCESS_FLAG) {
+ if (drvdata->flags & LITTLE_ENDIAN_ACCESS)
+ iowrite32(val, drvdata->regs + (offset << 2));
+ else
+ iowrite32be(val, drvdata->regs + (offset << 2));
+ }
#ifdef CONFIG_PPC_DCR
else
dcr_write(drvdata->dcr_host, offset, val);
#endif
}
+static u32 xilinx_fb_in32(struct xilinxfb_drvdata *drvdata, u32 offset)
+{
+ if (drvdata->flags & BUS_ACCESS_FLAG) {
+ if (drvdata->flags & LITTLE_ENDIAN_ACCESS)
+ return ioread32(drvdata->regs + (offset << 2));
+ else
+ return ioread32be(drvdata->regs + (offset << 2));
+ }
+#ifdef CONFIG_PPC_DCR
+ else
+ return dcr_read(drvdata->dcr_host, offset);
+#endif
+ return 0;
+}
+
static int
xilinx_fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue,
unsigned transp, struct fb_info *fbi)
@@ -271,6 +291,12 @@ static int xilinxfb_assign(struct platform_device *pdev,
/* Tell the hardware where the frame buffer is */
xilinx_fb_out32(drvdata, REG_FB_ADDR, drvdata->fb_phys);
+ rc = xilinx_fb_in32(drvdata, REG_FB_ADDR);
+ /* Endianess detection */
+ if (rc != drvdata->fb_phys) {
+ drvdata->flags |= LITTLE_ENDIAN_ACCESS;
+ xilinx_fb_out32(drvdata, REG_FB_ADDR, drvdata->fb_phys);
+ }
/* Turn on the display */
drvdata->reg_ctrl_default = REG_CTRL_ENABLE;
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 7/7] video: xilinxfb: Use driver for Xilinx ARM Zynq
2013-06-03 10:13 [PATCH v4 0/7] xilinxfb changes Michal Simek
` (5 preceding siblings ...)
2013-06-03 10:13 ` [PATCH v4 6/7] video: xilinxfb: Add support for little endian accesses Michal Simek
@ 2013-06-03 10:13 ` Michal Simek
[not found] ` <cover.1370254386.git.michal.simek-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>
7 siblings, 0 replies; 16+ messages in thread
From: Michal Simek @ 2013-06-03 10:13 UTC (permalink / raw)
To: linux-kernel
Cc: Michal Simek, Michal Simek, Arnd Bergmann, Timur Tabi,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 872 bytes --]
From: Michal Simek <monstr@monstr.eu>
Enable this driver for all Xilinx platforms.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Changes in v4:
- Remove "video: xilinxfb: Fix sparse warnings"
patch because it is trying to fix incorrect API
usage and sparse should warn about it.
Changes in v3: None
Changes in v2: None
drivers/video/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 2e937bd..2c301f8 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -2188,7 +2188,7 @@ config FB_PS3_DEFAULT_SIZE_M
config FB_XILINX
tristate "Xilinx frame buffer support"
- depends on FB && (XILINX_VIRTEX || MICROBLAZE)
+ depends on FB && (XILINX_VIRTEX || MICROBLAZE || ARCH_ZYNQ)
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 16+ messages in thread
[parent not found: <cover.1370254386.git.michal.simek-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v4 0/7] xilinxfb changes
[not found] ` <cover.1370254386.git.michal.simek-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>
@ 2013-06-06 16:23 ` Jean-Christophe PLAGNIOL-VILLARD
2013-06-17 5:23 ` Michal Simek
0 siblings, 1 reply; 16+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-06-06 16:23 UTC (permalink / raw)
To: Michal Simek
Cc: Timur Tabi, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA, Rob Herring,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Tomi Valkeinen, Grant Likely
On 12:13 Mon 03 Jun , Michal Simek wrote:
> Hi,
>
Arnd can you take look on it again please
I'll take a look on it next week
Best Regards,
J.
> I have done more changes in the driver to support probing
> on little and big endian system where detection is done
> directly on the hardware.
> I have also done some cleanups to get it to the better shape.
>
> Thanks for your review,
> Michal
>
> Changes in v4:
> - Acked by Arnd
> - Remove "video: xilinxfb: Fix sparse warnings"
> patch because it is trying to fix incorrect API
> usage and sparse should warn about it.
>
> Changes in v3:
> - fix commit message
> - Remove out_be IO name from function name
> - Change patch subject from "Do not use out_be32 IO function"
> to "Do not name out_be32 in function name"
> - New patch in this patchset based on discussions
> - New patch in this patchset based on discussions
> - New patch in this patchset
> - New patch in this patchset based on discussions
>
> Changes in v2:
> - use of_property_read_u32 helper function
>
> Michal Simek (7):
> video: xilinxfb: Fix OF probing on little-endian systems
> video: xilinxfb: Do not name out_be32 in function name
> video: xilinxfb: Rename PLB_ACCESS_FLAG to BUS_ACCESS_FLAG
> video: xilinxfb: Use drvdata->regs_phys instead of physaddr
> video: xilinxfb: Group bus initialization
> video: xilinxfb: Add support for little endian accesses
> video: xilinxfb: Use driver for Xilinx ARM Zynq
>
> drivers/video/Kconfig | 2 +-
> drivers/video/xilinxfb.c | 135 +++++++++++++++++++++++------------------------
> 2 files changed, 68 insertions(+), 69 deletions(-)
>
> --
> 1.8.2.3
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v4 0/7] xilinxfb changes
2013-06-06 16:23 ` [PATCH v4 0/7] xilinxfb changes Jean-Christophe PLAGNIOL-VILLARD
@ 2013-06-17 5:23 ` Michal Simek
2013-06-17 8:56 ` Jean-Christophe PLAGNIOL-VILLARD
0 siblings, 1 reply; 16+ messages in thread
From: Michal Simek @ 2013-06-17 5:23 UTC (permalink / raw)
To: Jean-Christophe PLAGNIOL-VILLARD
Cc: Michal Simek, linux-kernel, Arnd Bergmann, Timur Tabi,
devicetree-discuss, linux-fbdev, Tomi Valkeinen, Grant Likely,
Rob Herring
[-- Attachment #1: Type: text/plain, Size: 567 bytes --]
On 06/06/2013 06:23 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 12:13 Mon 03 Jun , Michal Simek wrote:
>> Hi,
>>
>
> Arnd can you take look on it again please
>
> I'll take a look on it next week
Any update on this?
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v4 0/7] xilinxfb changes
2013-06-17 5:23 ` Michal Simek
@ 2013-06-17 8:56 ` Jean-Christophe PLAGNIOL-VILLARD
2013-06-17 9:02 ` Michal Simek
0 siblings, 1 reply; 16+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-06-17 8:56 UTC (permalink / raw)
To: Michal Simek
Cc: Michal Simek, linux-kernel, Arnd Bergmann, Timur Tabi,
devicetree-discuss, linux-fbdev, Tomi Valkeinen, Grant Likely,
Rob Herring
On 07:23 Mon 17 Jun , Michal Simek wrote:
> On 06/06/2013 06:23 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > On 12:13 Mon 03 Jun , Michal Simek wrote:
> >> Hi,
> >>
> >
> > Arnd can you take look on it again please
> >
> > I'll take a look on it next week
>
> Any update on this?
look ok but I want the Ack from Arnd
Best Regards,
J.
>
> Thanks,
> Michal
>
> --
> Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
> w: www.monstr.eu p: +42-0-721842854
> Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
> Maintainer of Linux kernel - Xilinx Zynq ARM architecture
> Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v4 0/7] xilinxfb changes
2013-06-17 8:56 ` Jean-Christophe PLAGNIOL-VILLARD
@ 2013-06-17 9:02 ` Michal Simek
[not found] ` <51BED093.1040207-pSz03upnqPeHXe+LvDLADg@public.gmane.org>
0 siblings, 1 reply; 16+ messages in thread
From: Michal Simek @ 2013-06-17 9:02 UTC (permalink / raw)
To: Jean-Christophe PLAGNIOL-VILLARD, Arnd Bergmann
Cc: Michal Simek, linux-kernel, Timur Tabi, devicetree-discuss,
linux-fbdev, Tomi Valkeinen, Grant Likely, Rob Herring
[-- Attachment #1: Type: text/plain, Size: 759 bytes --]
On 06/17/2013 10:56 AM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 07:23 Mon 17 Jun , Michal Simek wrote:
>> On 06/06/2013 06:23 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
>>> On 12:13 Mon 03 Jun , Michal Simek wrote:
>>>> Hi,
>>>>
>>>
>>> Arnd can you take look on it again please
>>>
>>> I'll take a look on it next week
>>
>> Any update on this?
> look ok but I want the Ack from Arnd
ok.
Arnd?
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread