RE: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator
-Original Message- From: Sin, David Sent: Saturday, July 24, 2010 4:52 AM To: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org; Tony Lindgren; Russell King Cc: Kanigeri, Hari; Ohad Ben-Cohen; Hiremath, Vaibhav; Shilimkar, Santosh; Ramachandra, Ravikiran; Molnar, Lajos; Sin, David Subject: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator From: Ravi Ramachandra r.ramachan...@ti.com This patch implements a simple TILER Container Manager. Signed-off-by: Ravi Ramachandra r.ramachan...@ti.com Signed-off-by: Lajos Molnar mol...@ti.com Signed-off-by: David Sin david...@ti.com --- drivers/media/video/tiler/tcm/Makefile|1 + drivers/media/video/tiler/tcm/_tcm-sita.h | 64 drivers/media/video/tiler/tcm/tcm-sita.c | 459 + drivers/media/video/tiler/tcm/tcm-sita.h | 37 +++ 4 files changed, 561 insertions(+), 0 deletions(-) create mode 100644 drivers/media/video/tiler/tcm/Makefile create mode 100644 drivers/media/video/tiler/tcm/_tcm-sita.h create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.c create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.h diff --git a/drivers/media/video/tiler/tcm/Makefile b/drivers/media/video/tiler/tcm/Makefile new file mode 100644 index 000..8434607 --- /dev/null +++ b/drivers/media/video/tiler/tcm/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_TI_TILER) += tcm-sita.o diff --git a/drivers/media/video/tiler/tcm/_tcm-sita.h b/drivers/media/video/tiler/tcm/_tcm-sita.h new file mode 100644 index 000..4ede1ab --- /dev/null +++ b/drivers/media/video/tiler/tcm/_tcm-sita.h @@ -0,0 +1,64 @@ +/* + * _tcm_sita.h + * + * SImple Tiler Allocator (SiTA) private structures. + * + * Author: Ravi Ramachandra r.ramachan...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef _TCM_SITA_H +#define _TCM_SITA_H + +#include ../tcm.h + +/* length between two coordinates */ +#define LEN(a, b) ((a) (b) ? (a) - (b) + 1 : (b) - (a) + 1) + +enum criteria { + CR_MAX_NEIGHS = 0x01, + CR_FIRST_FOUND = 0x10, + CR_BIAS_HORIZONTAL = 0x20, + CR_BIAS_VERTICAL= 0x40, + CR_DIAGONAL_BALANCE = 0x80 +}; + +/* nearness to the beginning of the search field from 0 to 1000 */ +struct nearness_factor { + s32 x; + s32 y; +}; + +/* + * Statistics on immediately neighboring slots. Edge is the number of + * border segments that are also border segments of the scan field. Busy + * refers to the number of neighbors that are occupied. + */ +struct neighbor_stats { + u16 edge; + u16 busy; +}; + +/* structure to keep the score of a potential allocation */ +struct score { + struct nearness_factor f; + struct neighbor_stats n; + struct tcm_area a; + u16neighs; /* number of busy neighbors */ +}; + +struct sita_pvt { + struct mutex mtx; + struct tcm_area ***map; /* pointers to the parent area for each slot */ +}; + +#endif diff --git a/drivers/media/video/tiler/tcm/tcm-sita.c b/drivers/media/video/tiler/tcm/tcm-sita.c new file mode 100644 index 000..93be3e6 --- /dev/null +++ b/drivers/media/video/tiler/tcm/tcm-sita.c @@ -0,0 +1,459 @@ +/* + * tcm-sita.c + * + * SImple Tiler Allocator (SiTA): 2D and 1D allocation(reservation) algorithm + * + * Authors: Ravi Ramachandra r.ramachan...@ti.com, + * Lajos Molnar mol...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + */ +#include linux/slab.h + +#include _tcm-sita.h +#include tcm-sita.h + +#define TCM_ALG_NAME tcm_sita [Hiremath, Vaibhav] Move this after include statement. +#include tcm-utils.h + +#define ALIGN_DOWN(value, align) ((value) ~((align) - 1)) + +/* Individual selection criteria for different scan areas */ +static s32 CR_L2R_T2B = CR_BIAS_HORIZONTAL; + [Hiremath, Vaibhav] Not good practice to define variable in caps. Also why do we need this variable which is not getting modified and used as constant only? +/* + * TCM
RE: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator
Comments acknowledged. Adding in media lists also. -David -Original Message- From: Shilimkar, Santosh Sent: Saturday, July 24, 2010 2:13 AM To: Sin, David; linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org; Tony Lindgren; Russell King Cc: Kanigeri, Hari; Ohad Ben-Cohen; Hiremath, Vaibhav; Ramachandra, Ravikiran; Molnar, Lajos Subject: RE: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator -Original Message- From: Sin, David Sent: Saturday, July 24, 2010 4:52 AM To: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org; Tony Lindgren; Russell King Cc: Kanigeri, Hari; Ohad Ben-Cohen; Hiremath, Vaibhav; Shilimkar, Santosh; Ramachandra, Ravikiran; Molnar, Lajos; Sin, David Subject: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator From: Ravi Ramachandra r.ramachan...@ti.com This patch implements a simple TILER Container Manager. Signed-off-by: Ravi Ramachandra r.ramachan...@ti.com Signed-off-by: Lajos Molnar mol...@ti.com Signed-off-by: David Sin david...@ti.com --- drivers/media/video/tiler/tcm/Makefile|1 + drivers/media/video/tiler/tcm/_tcm-sita.h | 64 Why is such a header file name. Can't you club drivers/media/video/tiler/tcm/tcm-sita.c | 459 + drivers/media/video/tiler/tcm/tcm-sita.h | 37 +++ You should club _tcm-sita.h and tcm-sita.h together 4 files changed, 561 insertions(+), 0 deletions(-) create mode 100644 drivers/media/video/tiler/tcm/Makefile create mode 100644 drivers/media/video/tiler/tcm/_tcm-sita.h create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.c create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.h diff --git a/drivers/media/video/tiler/tcm/Makefile b/drivers/media/video/tiler/tcm/Makefile new file mode 100644 index 000..8434607 --- /dev/null +++ b/drivers/media/video/tiler/tcm/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_TI_TILER) += tcm-sita.o diff --git a/drivers/media/video/tiler/tcm/_tcm-sita.h b/drivers/media/video/tiler/tcm/_tcm-sita.h new file mode 100644 index 000..4ede1ab --- /dev/null +++ b/drivers/media/video/tiler/tcm/_tcm-sita.h @@ -0,0 +1,64 @@ +/* + * _tcm_sita.h + * + * SImple Tiler Allocator (SiTA) private structures. + * + * Author: Ravi Ramachandra r.ramachan...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef _TCM_SITA_H +#define _TCM_SITA_H + +#include ../tcm.h Header inclusion + +/* length between two coordinates */ +#define LEN(a, b) ((a) (b) ? (a) - (b) + 1 : (b) - (a) + 1) + +enum criteria { + CR_MAX_NEIGHS = 0x01, + CR_FIRST_FOUND = 0x10, + CR_BIAS_HORIZONTAL = 0x20, + CR_BIAS_VERTICAL= 0x40, + CR_DIAGONAL_BALANCE = 0x80 +}; + +/* nearness to the beginning of the search field from 0 to 1000 */ +struct nearness_factor { + s32 x; + s32 y; +}; + +/* + * Statistics on immediately neighboring slots. Edge is the number of + * border segments that are also border segments of the scan field. Busy + * refers to the number of neighbors that are occupied. + */ +struct neighbor_stats { + u16 edge; + u16 busy; +}; + +/* structure to keep the score of a potential allocation */ +struct score { + struct nearness_factor f; + struct neighbor_stats n; + struct tcm_area a; + u16neighs; /* number of busy neighbors */ +}; + +struct sita_pvt { + struct mutex mtx; + struct tcm_area ***map; /* pointers to the parent area for each slot */ +}; + +#endif diff --git a/drivers/media/video/tiler/tcm/tcm-sita.c b/drivers/media/video/tiler/tcm/tcm-sita.c new file mode 100644 index 000..93be3e6 --- /dev/null +++ b/drivers/media/video/tiler/tcm/tcm-sita.c @@ -0,0 +1,459 @@ +/* + * tcm-sita.c + * + * SImple Tiler Allocator (SiTA): 2D and 1D allocation(reservation) algorithm + * + * Authors: Ravi Ramachandra r.ramachan...@ti.com, + * Lajos Molnar mol...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + */ +#include linux/slab.h
RE: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator
-Original Message- From: Shilimkar, Santosh Sent: Saturday, July 24, 2010 2:13 AM + kfree(tcm); + kfree(pvt); If only one of the allocation was successful, then you are freeing a NULL pointer. May be have something like this tcm = kzalloc(sizeof(*tcm), GFP_KERNEL); if (!tcm) goto error1; pvt = kzalloc(sizeof(*pvt), GFP_KERNEL); if (!pvt) goto error2; . . . error1: kfree(tcm); error2: kfree(pvt); Freeing a NULL pointer is always valid, and simply returns. This is a C specification. -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator
-Original Message- From: Sin, David Sent: Saturday, July 24, 2010 4:52 AM To: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org; Tony Lindgren; Russell King Cc: Kanigeri, Hari; Ohad Ben-Cohen; Hiremath, Vaibhav; Shilimkar, Santosh; Ramachandra, Ravikiran; Molnar, Lajos; Sin, David Subject: [RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator From: Ravi Ramachandra r.ramachan...@ti.com This patch implements a simple TILER Container Manager. Signed-off-by: Ravi Ramachandra r.ramachan...@ti.com Signed-off-by: Lajos Molnar mol...@ti.com Signed-off-by: David Sin david...@ti.com --- drivers/media/video/tiler/tcm/Makefile|1 + drivers/media/video/tiler/tcm/_tcm-sita.h | 64 Why is such a header file name. Can't you club drivers/media/video/tiler/tcm/tcm-sita.c | 459 + drivers/media/video/tiler/tcm/tcm-sita.h | 37 +++ You should club _tcm-sita.h and tcm-sita.h together 4 files changed, 561 insertions(+), 0 deletions(-) create mode 100644 drivers/media/video/tiler/tcm/Makefile create mode 100644 drivers/media/video/tiler/tcm/_tcm-sita.h create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.c create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.h diff --git a/drivers/media/video/tiler/tcm/Makefile b/drivers/media/video/tiler/tcm/Makefile new file mode 100644 index 000..8434607 --- /dev/null +++ b/drivers/media/video/tiler/tcm/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_TI_TILER) += tcm-sita.o diff --git a/drivers/media/video/tiler/tcm/_tcm-sita.h b/drivers/media/video/tiler/tcm/_tcm-sita.h new file mode 100644 index 000..4ede1ab --- /dev/null +++ b/drivers/media/video/tiler/tcm/_tcm-sita.h @@ -0,0 +1,64 @@ +/* + * _tcm_sita.h + * + * SImple Tiler Allocator (SiTA) private structures. + * + * Author: Ravi Ramachandra r.ramachan...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef _TCM_SITA_H +#define _TCM_SITA_H + +#include ../tcm.h Header inclusion + +/* length between two coordinates */ +#define LEN(a, b) ((a) (b) ? (a) - (b) + 1 : (b) - (a) + 1) + +enum criteria { + CR_MAX_NEIGHS = 0x01, + CR_FIRST_FOUND = 0x10, + CR_BIAS_HORIZONTAL = 0x20, + CR_BIAS_VERTICAL= 0x40, + CR_DIAGONAL_BALANCE = 0x80 +}; + +/* nearness to the beginning of the search field from 0 to 1000 */ +struct nearness_factor { + s32 x; + s32 y; +}; + +/* + * Statistics on immediately neighboring slots. Edge is the number of + * border segments that are also border segments of the scan field. Busy + * refers to the number of neighbors that are occupied. + */ +struct neighbor_stats { + u16 edge; + u16 busy; +}; + +/* structure to keep the score of a potential allocation */ +struct score { + struct nearness_factor f; + struct neighbor_stats n; + struct tcm_area a; + u16neighs; /* number of busy neighbors */ +}; + +struct sita_pvt { + struct mutex mtx; + struct tcm_area ***map; /* pointers to the parent area for each slot */ +}; + +#endif diff --git a/drivers/media/video/tiler/tcm/tcm-sita.c b/drivers/media/video/tiler/tcm/tcm-sita.c new file mode 100644 index 000..93be3e6 --- /dev/null +++ b/drivers/media/video/tiler/tcm/tcm-sita.c @@ -0,0 +1,459 @@ +/* + * tcm-sita.c + * + * SImple Tiler Allocator (SiTA): 2D and 1D allocation(reservation) algorithm + * + * Authors: Ravi Ramachandra r.ramachan...@ti.com, + * Lajos Molnar mol...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + */ +#include linux/slab.h + +#include _tcm-sita.h +#include tcm-sita.h + +#define TCM_ALG_NAME tcm_sita +#include tcm-utils.h + +#define ALIGN_DOWN(value, align) ((value) ~((align) - 1)) + +/* Individual selection criteria for different scan areas */ +static s32 CR_L2R_T2B = CR_BIAS_HORIZONTAL; + +/* + * TCM API - Sita Implementation + */ Commenting style
[RFC 3/8] TILER-DMM: Sample TCM implementation: Simple TILER Allocator
From: Ravi Ramachandra r.ramachan...@ti.com This patch implements a simple TILER Container Manager. Signed-off-by: Ravi Ramachandra r.ramachan...@ti.com Signed-off-by: Lajos Molnar mol...@ti.com Signed-off-by: David Sin david...@ti.com --- drivers/media/video/tiler/tcm/Makefile|1 + drivers/media/video/tiler/tcm/_tcm-sita.h | 64 drivers/media/video/tiler/tcm/tcm-sita.c | 459 + drivers/media/video/tiler/tcm/tcm-sita.h | 37 +++ 4 files changed, 561 insertions(+), 0 deletions(-) create mode 100644 drivers/media/video/tiler/tcm/Makefile create mode 100644 drivers/media/video/tiler/tcm/_tcm-sita.h create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.c create mode 100644 drivers/media/video/tiler/tcm/tcm-sita.h diff --git a/drivers/media/video/tiler/tcm/Makefile b/drivers/media/video/tiler/tcm/Makefile new file mode 100644 index 000..8434607 --- /dev/null +++ b/drivers/media/video/tiler/tcm/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_TI_TILER) += tcm-sita.o diff --git a/drivers/media/video/tiler/tcm/_tcm-sita.h b/drivers/media/video/tiler/tcm/_tcm-sita.h new file mode 100644 index 000..4ede1ab --- /dev/null +++ b/drivers/media/video/tiler/tcm/_tcm-sita.h @@ -0,0 +1,64 @@ +/* + * _tcm_sita.h + * + * SImple Tiler Allocator (SiTA) private structures. + * + * Author: Ravi Ramachandra r.ramachan...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef _TCM_SITA_H +#define _TCM_SITA_H + +#include ../tcm.h + +/* length between two coordinates */ +#define LEN(a, b) ((a) (b) ? (a) - (b) + 1 : (b) - (a) + 1) + +enum criteria { + CR_MAX_NEIGHS = 0x01, + CR_FIRST_FOUND = 0x10, + CR_BIAS_HORIZONTAL = 0x20, + CR_BIAS_VERTICAL= 0x40, + CR_DIAGONAL_BALANCE = 0x80 +}; + +/* nearness to the beginning of the search field from 0 to 1000 */ +struct nearness_factor { + s32 x; + s32 y; +}; + +/* + * Statistics on immediately neighboring slots. Edge is the number of + * border segments that are also border segments of the scan field. Busy + * refers to the number of neighbors that are occupied. + */ +struct neighbor_stats { + u16 edge; + u16 busy; +}; + +/* structure to keep the score of a potential allocation */ +struct score { + struct nearness_factor f; + struct neighbor_stats n; + struct tcm_area a; + u16neighs; /* number of busy neighbors */ +}; + +struct sita_pvt { + struct mutex mtx; + struct tcm_area ***map; /* pointers to the parent area for each slot */ +}; + +#endif diff --git a/drivers/media/video/tiler/tcm/tcm-sita.c b/drivers/media/video/tiler/tcm/tcm-sita.c new file mode 100644 index 000..93be3e6 --- /dev/null +++ b/drivers/media/video/tiler/tcm/tcm-sita.c @@ -0,0 +1,459 @@ +/* + * tcm-sita.c + * + * SImple Tiler Allocator (SiTA): 2D and 1D allocation(reservation) algorithm + * + * Authors: Ravi Ramachandra r.ramachan...@ti.com, + * Lajos Molnar mol...@ti.com + * + * Copyright (C) 2009-2010 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + */ +#include linux/slab.h + +#include _tcm-sita.h +#include tcm-sita.h + +#define TCM_ALG_NAME tcm_sita +#include tcm-utils.h + +#define ALIGN_DOWN(value, align) ((value) ~((align) - 1)) + +/* Individual selection criteria for different scan areas */ +static s32 CR_L2R_T2B = CR_BIAS_HORIZONTAL; + +/* + * TCM API - Sita Implementation + */ +static s32 sita_reserve_2d(struct tcm *tcm, u16 h, u16 w, u8 align, + struct tcm_area *area); +static s32 sita_free(struct tcm *tcm, struct tcm_area *area); +static void sita_deinit(struct tcm *tcm); + +/* + * Main Scanner functions + */ +static s32 scan_areas_and_find_fit(struct tcm *tcm, u16 w, u16 h, u16 align, + struct tcm_area *area); + +static s32 scan_l2r_t2b(struct tcm *tcm, u16 w, u16 h, u16 align, + struct tcm_area *field, struct tcm_area *area); +